ngx-hana-nameserver-history-viewer 21.1.0 → 21.1.2
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.
- package/README.md +5 -5
- package/fesm2022/ngx-hana-nameserver-history-viewer.mjs +188 -70
- package/fesm2022/ngx-hana-nameserver-history-viewer.mjs.map +1 -1
- package/ngx-hana-nameserver-history-viewer-21.1.2.tgz +0 -0
- package/package.json +4 -3
- package/types/ngx-hana-nameserver-history-viewer.d.ts +29 -3
- package/ngx-hana-nameserver-history-viewer-21.1.0.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-hana-nameserver-history-viewer.mjs","sources":["../../src/nameserver-history-viewer/utils/chart-util.ts","../../src/nameserver-history-viewer/types/item.types.ts","../../src/nameserver-history-viewer/types/scale-group.types.ts","../../src/nameserver-history-viewer/types/unit.types.ts","../../src/nameserver-history-viewer/types/unit-category.types.ts","../../src/nameserver-history-viewer/types/alert.types.ts","../../src/nameserver-history-viewer/types/html-element.type.ts","../../src/nameserver-history-viewer/types/abort.types.ts","../../src/nameserver-history-viewer/utils/ui-util.ts","../../src/nameserver-history-viewer/utils/time-util.ts","../../src/nameserver-history-viewer/utils/file-util.ts","../../src/nameserver-history-viewer/services/ui.service.ts","../../src/nameserver-history-viewer/services/chart.service.ts","../../src/nameserver-history-viewer/services/file.service.ts","../../src/nameserver-history-viewer/components/file-drop-input/file-drop-input.component.ts","../../src/nameserver-history-viewer/components/instruction/instruction.component.ts","../../src/nameserver-history-viewer/components/instruction/instruction.component.html","../../src/nameserver-history-viewer/components/port-selector/port-selector.service.ts","../../src/nameserver-history-viewer/components/port-selector/port-selector.component.ts","../../src/nameserver-history-viewer/components/progress-bar/progress-bar.component.ts","../../src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.ts","../../src/nameserver-history-viewer/components/timezone-selector/timezone-selector.service.ts","../../src/nameserver-history-viewer/components/timezone-selector/timezone-selector.component.ts","../../src/nameserver-history-viewer/components/alert/alert.component.ts","../../src/nameserver-history-viewer/components/alert/alert.component.html","../../src/nameserver-history-viewer/components/nameserver-history.component.ts","../../src/nameserver-history-viewer/components/nameserver-history.component.html","../../ngx-hana-nameserver-history-viewer.ts"],"sourcesContent":["import { ColorRgba } from '../types';\r\n\r\n\r\nfunction _randomColorFactor(): number {\r\n return Math.round(Math.random() * 255);\r\n}\r\n\r\n/**\r\n * generate random color\r\n * @param opacity alpha\r\n */\r\nexport function randomColor(opacity: number): string {\r\n return 'rgba(' + _randomColorFactor() + ',' + _randomColorFactor() + ',' + _randomColorFactor() + ',' + (opacity || '.3') + ')';\r\n}\r\n\r\n/**\r\n * generate the rgba string from ColorRgba\r\n */\r\nexport function getColorString(rgbaColor: ColorRgba): string {\r\n return `rgba(${rgbaColor['red']}, ${rgbaColor['green']}, ${rgbaColor['blue']}, ${rgbaColor['alpha']})`;\r\n}\r\n\r\n/**\r\n * format Number with commas\r\n */\r\nexport function getNumberWithCommas(num: number): string {\r\n const [integerPart, decimalPart] = num.toString().split('.');\r\n const integerWithCommas = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n return decimalPart ? `${integerWithCommas}.${decimalPart}` : integerWithCommas;\r\n}\r\n","export enum Item {\r\n kpi = 'KPI',\r\n yScale = 'Y-Scale',\r\n yScaleGroup = '_YScaleGroup',\r\n unit = 'Unit',\r\n max = 'Max',\r\n average = 'Average',\r\n sum = 'Sum',\r\n last = 'Last',\r\n description = 'Description',\r\n header = 'header'\r\n}\r\n","export enum ScaleGroup {\r\n CPU,\r\n Memory,\r\n Disk,\r\n Network,\r\n Swap,\r\n Time,\r\n Req,\r\n Stmt,\r\n WRTime,\r\n WRSize,\r\n Conn,\r\n Trans,\r\n Unknown\r\n}\r\n","export enum Unit {\r\n PCT = '%',\r\n MS = 'ms',\r\n Empty = '',\r\n GB = 'GB',\r\n MB = 'MB',\r\n MBPerSec = 'MB/s',\r\n SecPerSec = 'Sec/s',\r\n StmtPerSec = 'stm/s',\r\n ReqPerSec = 'req/s',\r\n ColPerSec = 'col/s'\r\n}\r\n","export enum UnitType {\r\n TypeEA,\r\n TypeGB,\r\n TypeMB,\r\n TypeSecSec,\r\n TypeMBSec,\r\n TypeSec\r\n}\r\n","export enum Alert {\r\n success = 'success',\r\n error = 'error',\r\n info = 'info',\r\n warning = 'warning',\r\n}\r\n","export enum HtmlElement {\r\n chartArea,\r\n readFileProgress,\r\n showChartButton,\r\n loadPortsButton,\r\n resetChartButton\r\n}\r\n","export enum Abort {\r\n maxLineNumReached,\r\n maxTimeRangeReached,\r\n}\r\n","import { getRealPorts } from './file-util';\r\nimport {UnitType, Port, ChartContentData} from '../types';\r\n\r\n/**\r\n * For some reason, hana studio will abandon the last line of nameserver history trace file\r\n */\r\nconst _IGNORED_LINE_FROM_TAIL = 1;\r\n\r\n/**\r\n * None index server ports in name server history,\r\n * 01: name server; 02: preprocessor; 04: script server; 05: statistics server / diserver;\r\n * 06: web dispatcher; 07: xsengine; 10 compileserver; 11 dpserver; 12 esserver; 29 xscontroller\r\n */\r\nconst _NON_INDEX_SERVER_PORTS = ['01', '02', '04', '05', '06', '07', '10', '11', '12', '29'];\r\n\r\n/**\r\n * Get the ignored line number from tail (For some reason, hana studio will abandon the last line of nameserver history trace file).\r\n */\r\nexport function getIgnoredLineNumFromTail() {\r\n return _IGNORED_LINE_FROM_TAIL;\r\n}\r\n\r\n/**\r\n * get the port that needs to be displayed from ports list via the selected port\r\n * @param ports overall ports list\r\n * @param port the selected port\r\n */\r\nexport function getDisplayPort(ports: string[], port: string): string {\r\n if (ports != null && ports.length > 0) {\r\n if (port == null || port.length === 0) {\r\n // if no port is selected\r\n if (ports.length === 1) {\r\n // not mdc system, will display the only one\r\n port = ports[0];\r\n } else {\r\n // select the first service (not in _NON_INDEX_SERVER_PORTS list)\r\n port = getRealPorts(ports).find(p => _NON_INDEX_SERVER_PORTS.indexOf(p.slice(-2)) < 0);\r\n if (port == null) {\r\n port = getRealPorts(ports)[0];\r\n }\r\n }\r\n } else {\r\n // get real port is port is some thing like 3**03\r\n if (port.slice(1, 3) === '**') {\r\n port = ports.find(key => key.slice(-2) === port.slice(-2));\r\n } else {\r\n port = ports.find(key => key === port);\r\n }\r\n }\r\n } else {\r\n port = void 0;\r\n }\r\n return port;\r\n}\r\n\r\n/**\r\n * Generate the ports for ngx-select.\r\n * If the provided ports is not null and no port has been selected,\r\n * will choose the first item which is not 01 (nameserver) or 07 (xsengine)\r\n *\r\n */\r\nexport function generatePorts(ports: string[] = null, selectedPort: string = null): Port[] {\r\n if (ports == null) {\r\n return null;\r\n } else {\r\n // if no selection, choose the first item which is not 01 (nameserver) or 07 (xsengine)\r\n if (selectedPort == null || selectedPort === '') {\r\n const firstIndexServer = ports.find(p => _NON_INDEX_SERVER_PORTS.indexOf(p.slice(-2)) < 0);\r\n selectedPort = firstIndexServer ? firstIndexServer : ports[0];\r\n }\r\n\r\n let index = ports.findIndex(port => port === selectedPort);\r\n if (index === -1) {\r\n // selection is not exists in the file\r\n index = 0;\r\n }\r\n const newPorts: Port[] = ports.map(port => ({id: port, text: port}));\r\n newPorts[index].selected = true;\r\n return newPorts;\r\n }\r\n}\r\n\r\n/**\r\n * get unit factor by unit\r\n */\r\nexport function getUnitFactor(unitType: UnitType): number {\r\n let unitFactor = 1;\r\n switch (unitType) {\r\n case UnitType.TypeGB:\r\n // BYTE to GB\r\n unitFactor = 1024 * 1024 * 1024;\r\n break;\r\n case UnitType.TypeMB:\r\n case UnitType.TypeMBSec:\r\n // BYTE to MB\r\n unitFactor = 1024 * 1024;\r\n break;\r\n case UnitType.TypeSecSec:\r\n // micro second to second\r\n unitFactor = 1000000;\r\n }\r\n return unitFactor;\r\n}\r\n/**\r\n * get value by unit (divided by the unit factor).\r\n */\r\nexport function getValueByUnit(value: number, unit: UnitType): number {\r\n return (value / getUnitFactor(unit));\r\n}\r\n\r\n/**\r\n * get rounded value: if value >= 10, round to integer; if value < 10, round to at most 2 decimal places\r\n */\r\nexport function getRoundedValue(value: number): number {\r\n return value >= 10 ? Math.round (value) : Math.round(value * 100) / 100;\r\n}\r\n\r\n/**\r\n * check whether unit is time related.\r\n */\r\nexport function isUnitTimeRelated (unit: UnitType): boolean {\r\n return unit === UnitType.TypeMBSec || unit === UnitType.TypeSec || unit === UnitType.TypeSecSec;\r\n}\r\n\r\n/**\r\n * calculate YScale base on the provided value\r\n */\r\nexport function calculateYScale(value: number): number {\r\n // round up to next 2,5,10,20,50,100,...\r\n if (value <= 0) {\r\n return 100;\r\n }\r\n const scale = Math.pow( 10, Math.floor(Math.log10(value)));\r\n if (scale >= value) {\r\n return scale;\r\n }\r\n if (2 * scale >= value) {\r\n return 2 * scale;\r\n }\r\n if ( 5 * scale >= value) {\r\n return 5 * scale;\r\n }\r\n\r\n return 10 * scale;\r\n}\r\n\r\nexport function isEmptyData(data: ChartContentData): boolean {\r\n if (data) {\r\n return Object.keys(data).findIndex(port => {\r\n if (port != null && data[port]) {\r\n return data[port].findIndex(row => row && row.length > 0) >= 0;\r\n }\r\n return false;\r\n }) < 0;\r\n }\r\n return true;\r\n}\r\n\r\nexport function sleep (time: number): Promise<any> {\r\n return new Promise((resolve) => setTimeout(resolve, time));\r\n}\r\n\r\nexport function setChartHeight(nsAll, nsContent): void {\r\n // const item1 = (document.getElementsByClassName('nameserver-history-all') as HTMLCollectionOf<HTMLElement>)[0];\r\n // const item2 = (document.getElementsByClassName('nameserver-history-content') as HTMLCollectionOf<HTMLElement>)[0];\r\n if (nsAll && nsContent) {\r\n const chartHeight = nsAll.offsetWidth * 0.75 / 2 + 10;\r\n nsContent.style.height = `${chartHeight}px`;\r\n }\r\n}\r\n\r\n","import { isDevMode } from '@angular/core';\r\nimport { getIgnoredLineNumFromTail } from './ui-util';\r\nimport { ChartContentTime } from '../types';\r\nimport moment from 'moment-timezone';\r\n\r\n/**\r\n * get the time range for all ports\r\n */\r\nfunction _getTotalTimeRange(time: ChartContentTime): {startTime: number, endTime: number} {\r\n if (time) {\r\n let startTime = 4102358400000; // 2099/12/31\r\n let endTime = 0;\r\n\r\n Object.keys(time).forEach(port => {\r\n if (time[port]) {\r\n const timeRangeCurrent = _getTimeRange(time[port]);\r\n startTime = startTime > timeRangeCurrent.startTime ? timeRangeCurrent.startTime : startTime;\r\n endTime = endTime < timeRangeCurrent.endTime ? timeRangeCurrent.endTime : endTime;\r\n }\r\n });\r\n\r\n return {startTime: startTime, endTime: endTime};\r\n }\r\n return undefined;\r\n}\r\n\r\n/**\r\n * get the time range (startTime ~ endTime) base on the time (the xScale)\r\n */\r\nfunction _getTimeRange(time: number[]): {startTime: number, endTime: number} {\r\n const ignoredLineNumFromTail = getIgnoredLineNumFromTail();\r\n if (time) {\r\n let startTime = 4102358400000; // 2099/12/31\r\n let endTime = 0;\r\n\r\n const len = time.length;\r\n if (len > ignoredLineNumFromTail) {\r\n startTime = time[0] > startTime ? startTime : time[0];\r\n endTime = time[len - ignoredLineNumFromTail - 1] > endTime ? time[len - ignoredLineNumFromTail - 1] : endTime;\r\n }\r\n\r\n return {startTime: startTime, endTime: endTime};\r\n }\r\n return {startTime: 0, endTime: 0};\r\n}\r\n\r\n/**\r\n * get default local time zone\r\n */\r\nexport function getDefaultTimezone(): string {\r\n return moment.tz.guess();\r\n}\r\n\r\n/**\r\n * Get time from provided timezone, using this only because chart.js doesn't support timezone.\r\n * This function will be removed when chart.js starts to support timezone feature.\r\n * @param time time in seconds (Epoch time)\r\n * @param timezone timezone string, uses local timezone if this is null.\r\n */\r\nexport function getTimeFromTimeZone (time: number, timezone: string): number {\r\n if (timezone == null || timezone.length === 0) {\r\n timezone = getDefaultTimezone();\r\n console.warn(`getTimeFromTimeZone - Input timezone is null, returning the local (${timezone}) time. `);\r\n }\r\n const utcOffset = moment.tz.zone(timezone).utcOffset(time * 1000);\r\n const currentOffset = moment.tz.zone(getDefaultTimezone()).utcOffset(time * 1000);\r\n // convert to utc and then to selected timezone\r\n return time + currentOffset * 60 - utcOffset * 60;\r\n}\r\n\r\n/**\r\n * Get time formatted with the provided timezone\r\n */\r\nexport function getTimeString (time: number): string {\r\n return moment(time).format('YYYY-MM-DD HH:mm:ss');\r\n}\r\n\r\n/**\r\n * Get the time range string by time array, eg: 2018-10-25 10:10:00 ~ 2018-10-25 12:12:00\r\n */\r\nexport function getTimeRangeString(time: any): string {\r\n let startTimeString = 'N/A';\r\n let endTimeString = 'N/A';\r\n let timeRange;\r\n if (Array.isArray(time)) {\r\n timeRange = _getTimeRange(time);\r\n } else {\r\n timeRange = _getTotalTimeRange(time);\r\n }\r\n\r\n if (timeRange) {\r\n if (timeRange.startTime < 4102358400000) {\r\n startTimeString = getTimeString(timeRange.startTime);\r\n }\r\n\r\n if (timeRange.endTime > 0) {\r\n endTimeString = getTimeString(timeRange.endTime);\r\n }\r\n return `${startTimeString} ~ ${endTimeString}`;\r\n }\r\n return 'N/A ~ N/A';\r\n}\r\n\r\n/**\r\n * print processed time from the provided beginTime, only works in dev mode\r\n */\r\nexport function printProcessedTime(beginTime: Date, step: string): void {\r\n if (isDevMode()) {\r\n // only do it in dev mode\r\n const timeAfter = new Date();\r\n const parsingTime = (timeAfter.getTime() - beginTime.getTime()) / 1000;\r\n console.log(`${step}, Parsing time: ${parsingTime} seconds`);\r\n }\r\n}\r\n","import {getTimeFromTimeZone} from './time-util';\r\n\r\nconst _DEFAULT_PORT = 'DEFAULT';\r\n\r\n/**\r\n * get the default port string (for non-MDC system)\r\n */\r\nexport function getDefaultPort(): string {\r\n return _DEFAULT_PORT;\r\n}\r\n\r\n/**\r\n * get abbreviated file name\r\n * @param fileName\r\n */\r\nexport function getAbbreviatedFileName(fileName: string): string {\r\n return fileName == null || fileName.length <= 22 ? fileName : `${fileName.slice(0, 11)}...${fileName.slice(-11)}`;\r\n}\r\n\r\n/**\r\n * get port if empty return default port\r\n */\r\nexport function getPort(port: string): string {\r\n return port == null || port.length === 0 ? _DEFAULT_PORT : port;\r\n}\r\n\r\n/**\r\n * get all real ports except the default port \"default\"\r\n */\r\nexport function getRealPorts(ports: string[], includeDefault: boolean = false): string[] {\r\n if (ports == null) {\r\n return [];\r\n }\r\n if (includeDefault) {\r\n return ports;\r\n } else {\r\n return ports.filter(port => port !== _DEFAULT_PORT);\r\n }\r\n}\r\n\r\n/**\r\n * get file from <input>\r\n * @param inputTarget\r\n */\r\nexport function getFileFromInput(inputTarget: any): File | null {\r\n if (inputTarget && inputTarget.files && inputTarget.files.length > 0) {\r\n return inputTarget.files[0];\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * get file from drag and drop\r\n */\r\nexport function getFileFromDrop(dragEvent: any): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n if (dragEvent.error) {\r\n reject(dragEvent.error);\r\n } else {\r\n if (dragEvent.file) {\r\n resolve(dragEvent.file);\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Check whether the port from file is the same with the selected port.\r\n * If the selected port is empty, return true directly. This makes all ports will be selected.\r\n * @param portFromFile Port read from file\r\n * @param portFromSelection Port from selection.\r\n * @param isMDC MDC flag\r\n */\r\nexport function isSamePort(portFromFile: string, portFromSelection: string, isMDC: boolean): boolean {\r\n // if it's MDC system, and the port From File is default port, return false\r\n if (isMDC && portFromFile === _DEFAULT_PORT) {\r\n return false;\r\n }\r\n // if selected port is empty, return true directly. This makes all ports being selected\r\n if (portFromSelection == null || portFromSelection.length === 0) {\r\n return true;\r\n }\r\n\r\n return portFromFile === portFromSelection || portFromFile.slice(-2) === portFromSelection.slice(-2);\r\n}\r\n\r\n/**\r\n * As javascript can't get the full path of file, if these two files have same\r\n * 1. lastModified, 2. name, 3. size, these two files are considered as the same file\r\n */\r\nexport function isSameFile(file1: File, file2: File): boolean {\r\n if (file1 && file2) {\r\n if (file1.lastModified === file2.lastModified && file1.name === file2.name && file1.size === file2.size) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Check whether the provided port is a valid port (3xxxx)\r\n */\r\nexport function isValidPort(port: string): boolean {\r\n return port && port.length === 5 && port[0] === '3';\r\n}\r\n\r\n/**\r\n * get next value from current value base on the operator \"<\" or \">\".\r\n * Keep using current value until the \"nextValue\" is not empty.\r\n */\r\nexport function calculateValue(lastValue: number, nextValue: string): number {\r\n // if the relative value missed, it's null.\r\n // And if it's missed, just use current value from last line.\r\n let newValue = lastValue;\r\n if (nextValue != null && nextValue.length > 0) {\r\n if (nextValue[0] === '<') {\r\n newValue = lastValue - parseFloat(nextValue.slice(1));\r\n } else if (nextValue[0] === '>') {\r\n newValue = lastValue + parseFloat(nextValue.slice(1));\r\n } else {\r\n newValue = parseFloat(nextValue);\r\n }\r\n }\r\n return newValue;\r\n}\r\n\r\n/**\r\n * get next time value from current time base on the operator \"<\" or \">\".\r\n * If nextValue is not \"<\" or \">\", returns converted time base on the timezone\r\n */\r\nexport function calculateValue4Time(lastValue: number, nextValue: string, timezone: string): number {\r\n // if the relative value missed, it's null.\r\n // And if it's missed, just use current value from last line.\r\n let newValue = lastValue;\r\n if (nextValue != null && nextValue.length > 0) {\r\n if (nextValue[0] !== '<' && nextValue[0] !== '>') {\r\n newValue = getTimeFromTimeZone(parseFloat(nextValue), timezone);\r\n } else {\r\n newValue = calculateValue(lastValue, nextValue);\r\n }\r\n }\r\n return newValue;\r\n}\r\n\r\n/**\r\n * check whether the data comes from valid nameserver history file\r\n */\r\nexport function validateData(data: string[][]): boolean {\r\n return data == null ? false : data.length >= 4 && ['host', 'time'].every(i => data[0].includes(i));\r\n}\r\n\r\n/**\r\n * convert blob to file\r\n * @param theBlob\r\n * @param fileName\r\n */\r\nexport function blobToFile (theBlob: Blob, fileName: string): File {\r\n const blob: any = theBlob;\r\n // A Blob() is almost a File() - it's just missing the two properties below which we will add\r\n blob.lastModifiedDate = new Date();\r\n blob.name = fileName;\r\n\r\n // Cast to a File() type\r\n return <File>theBlob;\r\n}\r\n\r\n/**\r\n * check the object is a File object or not a File(Blob)\r\n * @param obj\r\n */\r\nexport function isFile(obj): boolean {\r\n return obj && typeof obj.name === 'string';\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { getIgnoredLineNumFromTail, isUnitTimeRelated, getValueByUnit, getRoundedValue, calculateYScale } from '../utils';\r\nimport {\r\n ColorRgba,\r\n LoadHistoryInfo,\r\n LoadHistoryInfoBackup,\r\n LoadHistoryInfoColumnStore,\r\n LoadHistoryInfoHost,\r\n LoadHistoryInfoIndexServer,\r\n LoadHistoryInfoItem,\r\n LoadHistoryInfoPersistence,\r\n LoadHistoryInfoRowStore,\r\n LoadHistoryInfoSessionAdmissionControl,\r\n LoadHistoryInfoSQL,\r\n LoadHistoryInfoSyncPrimitives,\r\n LoadHistoryInfoThreads,\r\n ChartContentDataItem,\r\n ChartContentHeader,\r\n LegendColor,\r\n ScaleGroup,\r\n Unit,\r\n UnitType,\r\n Item\r\n} from '../types';\r\n\r\n// Using dynamic flag to fix the issue of ng-packagr #696: Lambda not supported\r\n// @dynamic\r\n@Injectable()\r\nexport class UIService {\r\n private readonly _DEFAULT_DISPLAY_ITEMS: string[] = ['cpuUsed', 'indexserverMemUsed', 'mvccNum'];\r\n private readonly _HIDED_COLUMNS: string[] = [Item.yScaleGroup, Item.description];\r\n private readonly _MEASURE_COLUMNS: string[] = [Item.max, Item.average, Item.sum, Item.last];\r\n private _loadHistoryInfos = {};\r\n\r\n /**\r\n * get the colors for legends\r\n */\r\n public static getColors(alpha: number = null): LegendColor {\r\n if (alpha == null) {\r\n alpha = 0.8;\r\n }\r\n return {\r\n cpuUsed : this._getRgbColor(199, 21, 133, alpha), // mediumvioletred\r\n memoryResident : this._getRgbColor(238, 130, 238, alpha), // violet\r\n memoryTotalResident : this._getRgbColor(72, 61, 139, alpha), // darkslateblue\r\n memoryUsed : this._getRgbColor(0, 0, 205, alpha), // mediumblue\r\n memoryLimit : this._getRgbColor(255, 105, 180, alpha), // hotpink\r\n memorySize : this._getRgbColor(70, 130, 180, alpha), // steelblue\r\n diskUsed : this._getRgbColor(25, 25, 112, alpha), // midnightblue\r\n diskSize : this._getRgbColor(0, 255, 255, alpha), // aqua\r\n networkIn : this._getRgbColor(102, 51, 153, alpha), // rebeccapurple\r\n networkOut : this._getRgbColor(245, 222, 179, alpha), // wheat\r\n swapIn : this._getRgbColor(47, 79, 79, alpha), // darkslategray\r\n swapOut : this._getRgbColor(205, 92, 92, alpha), // indianred\r\n indexserverCpu : this._getRgbColor(255, 99, 71, alpha), // tomato\r\n indexserverCpuSys : this._getRgbColor(255, 20, 147, alpha), // deeppink\r\n indexserverMemUsed : this._getRgbColor(0, 255, 0, alpha), // lime\r\n indexserverMemLimit : this._getRgbColor(139, 0, 0, alpha), // darkred\r\n indexserverHandles : this._getRgbColor(139, 0, 139, alpha), // darkmagenta\r\n indexserverPingtime : this._getRgbColor(189, 183, 107, alpha), // darkkhaki\r\n indexserverSwapIn : this._getRgbColor(112, 128, 144, alpha), // slategray\r\n sqlConnections : this._getRgbColor(85, 107, 47, alpha), // darkolivegreen\r\n internalConnections : this._getRgbColor(46, 139, 87, alpha), // seagreen\r\n externalConnections : this._getRgbColor(147, 112, 219, alpha), // mediumpurple\r\n idleConnections : this._getRgbColor(216, 191, 216, alpha), // thistle\r\n sqlTransactions : this._getRgbColor(220, 20, 60, alpha), // crimson\r\n internalTransactions : this._getRgbColor(186, 85, 211, alpha), // mediumorchid\r\n externalTransactions : this._getRgbColor(221, 160, 221, alpha), // plum\r\n userTransactions : this._getRgbColor(210, 105, 30, alpha), // chocolate\r\n sqlBlockedTrans : this._getRgbColor(0, 0, 255, alpha), // blue\r\n sqlStatements : this._getRgbColor(188, 143, 143, alpha), // rosybrown\r\n cidRange : this._getRgbColor(32, 178, 170, alpha), // lightseagreen\r\n tidRange : this._getRgbColor(124, 252, 0, alpha), // lawngreen\r\n pendingRequestCount : this._getRgbColor(160, 32, 240, alpha), // purple3\r\n mvccNum : this._getRgbColor(65, 105, 225, alpha), // royalblue\r\n acquiredRecordLocks : this._getRgbColor(0, 250, 154, alpha), // mediumspringgreen\r\n searchCount : this._getRgbColor(127, 255, 212, alpha), // aquamarine\r\n indexingCount : this._getRgbColor(0, 191, 255, alpha), // deepskyblue\r\n mergeCount : this._getRgbColor(135, 206, 235, alpha), // skyblue\r\n unloadCount : this._getRgbColor(255, 165, 0, alpha), // orange\r\n indexserverThreads : this._getRgbColor(0, 100, 0, alpha), // darkgreen\r\n waitingThreads : this._getRgbColor(176, 48, 96, alpha), // maroon3\r\n totalThreads : this._getRgbColor(100, 149, 237, alpha), // cornflower\r\n activeSqlExecutors : this._getRgbColor(175, 238, 238, alpha), // paleturquoise\r\n waitingSqlExecutors : this._getRgbColor(50, 205, 50, alpha), // limegreen\r\n totalSqlExecutors : this._getRgbColor(240, 230, 140, alpha), // khaki\r\n dataWriteSize : this._getRgbColor(102, 205, 170, alpha), // mediumaquamarine\r\n dataWriteTime : this._getRgbColor(169, 169, 169, alpha), // darkgray\r\n logWriteSize : this._getRgbColor(160, 82, 45, alpha), // sienna\r\n logWriteTime : this._getRgbColor(128, 128, 0, alpha), // olive\r\n dataReadSize : this._getRgbColor(255, 215, 0, alpha), // gold\r\n dataReadTime : this._getRgbColor(95, 158, 160, alpha), // cadetblue\r\n logReadSize : this._getRgbColor(255, 0, 0, alpha), // red\r\n logReadTime : this._getRgbColor(184, 134, 11, alpha), // darkgoldenrod\r\n dataBackupWriteSize : this._getRgbColor(255, 255, 0, alpha), // yellow\r\n dataBackupWriteTime : this._getRgbColor(154, 205, 50, alpha), // yellowgreen\r\n logBackupWriteSize : this._getRgbColor(0, 0, 139, alpha), // darkblue\r\n logBackupWriteTime : this._getRgbColor(219, 112, 147, alpha), // palevioletred\r\n mutexCollisionCount : this._getRgbColor(244, 164, 96, alpha), // sandybrown\r\n readWriteLockCollisionCount : this._getRgbColor(233, 150, 122, alpha), // darksalmon\r\n admissinControlAdmitCount : this._getRgbColor(143, 188, 143, alpha), // darkseagreen\r\n admissionControlRejectCount : this._getRgbColor(255, 0, 255, alpha), // fuchsia\r\n admissionControlWaitingRequests: this._getRgbColor(153, 50, 204, alpha), // darkorchid\r\n admissionControlWaitTime : this._getRgbColor(144, 238, 144, alpha), // lightgreen\r\n };\r\n }\r\n\r\n private static get _unitType(): any {\r\n const unitType = {};\r\n unitType[Unit.PCT] = UnitType.TypeEA;\r\n unitType[Unit.MS] = UnitType.TypeEA;\r\n unitType[Unit.Empty] = UnitType.TypeEA;\r\n unitType[Unit.GB] = UnitType.TypeGB;\r\n unitType[Unit.MB] = UnitType.TypeMB;\r\n unitType[Unit.MBPerSec] = UnitType.TypeMBSec;\r\n unitType[Unit.SecPerSec] = UnitType.TypeSecSec;\r\n unitType[Unit.StmtPerSec] = UnitType.TypeSec;\r\n unitType[Unit.ReqPerSec] = UnitType.TypeSec;\r\n unitType[Unit.ColPerSec] = UnitType.TypeSec;\r\n return unitType;\r\n }\r\n\r\n /**\r\n * get yScale group list from the enum ScaleGroup\r\n */\r\n private static get _YScaleGroupList(): any[] {\r\n return Object.keys(ScaleGroup).filter(key => !isNaN(Number(ScaleGroup[key]))).map(key => ScaleGroup[key]);\r\n }\r\n\r\n /**\r\n * Generate one item by the provided attributes and values\r\n * @param args the dynamic parameter of [attribute, value]\r\n */\r\n private static _generateLoadHistoryInfoItem(...args): LoadHistoryInfoItem {\r\n const obj = {};\r\n if (!args || args.length <= 0) {\r\n return obj;\r\n }\r\n\r\n args.forEach(item => {\r\n if (item && item.length >= 2) {\r\n obj[item[0]] = item[1];\r\n }\r\n });\r\n return obj;\r\n }\r\n\r\n /**\r\n * generate the loadHistoryInfo object with default values.\r\n */\r\n private static _generateLoadHistoryInfo(): LoadHistoryInfo {\r\n // minimum value for YScale of swapIn, swapOut, indexserverSwapIn is 100 (according to hana studio)\r\n const infoItem = UIService._generateLoadHistoryInfoItem; // just for making the name shorter...\r\n const cpuUsed = infoItem([Item.kpi, 'CPU' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.CPU ], [Item.unit, Unit.PCT ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'CPU Used by all processes']);\r\n const memoryResident = infoItem([Item.kpi, 'Database Resident Memory' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Physical memory used for all HANA processes']);\r\n const memoryTotalResident = infoItem([Item.kpi, 'Total Resident Memory' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Physical memory used for all processes']);\r\n const memoryUsed = infoItem([Item.kpi, 'Database Used Memory' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory used for all HANA processes']);\r\n const memoryLimit = infoItem([Item.kpi, 'Database Allocation Limit' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory allocation limit for all processes of HANA instance']);\r\n const memorySize = infoItem([Item.kpi, 'Physical Memory Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Physical memory size']);\r\n const diskUsed = infoItem([Item.kpi, 'Disk Used' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Disk ], [Item.unit, Unit.GB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Disk used']);\r\n const diskSize = infoItem([Item.kpi, 'Disk Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Disk ], [Item.unit, Unit.GB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Disk size']);\r\n const networkIn = infoItem([Item.kpi, 'Network In' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Network], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from network by all processes']);\r\n const networkOut = infoItem([Item.kpi, 'Network Out' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Network], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to network by all processes']);\r\n const swapIn = infoItem([Item.kpi, 'Swap In' ], [Item.yScale, 100], [Item.yScaleGroup, ScaleGroup.Swap ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from swap by all processes (pswpin line in /proc/vmstat * sysconf(_SC_PAGESIZE))']);\r\n const swapOut = infoItem([Item.kpi, 'Swap Out' ], [Item.yScale, 100], [Item.yScaleGroup, ScaleGroup.Swap ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written To swap by all processes (pswpout line in /proc/vmstat * sysconf(_SC_PAGESIZE))']);\r\n const indexserverCpu = infoItem([Item.kpi, 'Index Server CPU' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.CPU ], [Item.unit, Unit.PCT ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'CPU used by Service']);\r\n const indexserverCpuSys = infoItem([Item.kpi, 'System CPU' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.CPU ], [Item.unit, Unit.PCT ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'OS Kernel/System CPU used by Service']);\r\n const indexserverMemUsed = infoItem([Item.kpi, 'Memory Used' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory used by Service']);\r\n const indexserverMemLimit = infoItem([Item.kpi, 'Memory Allocation Limit' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory allocation limit for Service']);\r\n const indexserverHandles = infoItem([Item.kpi, 'Handles' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open handles']);\r\n const indexserverPingtime = infoItem([Item.kpi, 'Ping Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.MS ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Duration of Service ping request (THREAD_METHOD=\\'__nsWatchdog\\'). This request includes the collection of service specific KPI\\'s']);\r\n const indexserverSwapIn = infoItem([Item.kpi, 'Index Server Swap In' ], [Item.yScale, 100], [Item.yScaleGroup, ScaleGroup.Swap ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from swap by Service (column 12(majflt) in /proc/<pid>/stat * sysconf(_SC_PAGESIZE))']);\r\n const sqlConnections = infoItem([Item.kpi, 'Open Connections' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Conn ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL connections']);\r\n const internalConnections = infoItem([Item.kpi, 'Internal Connections' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Conn ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL internal connections']);\r\n const externalConnections = infoItem([Item.kpi, 'External Connections' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Conn ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL external connections']);\r\n const idleConnections = infoItem([Item.kpi, 'Idle Connections' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Conn ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL idle connections']);\r\n const sqlTransactions = infoItem([Item.kpi, 'Open Transactions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Trans ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL transactions']);\r\n const internalTransactions = infoItem([Item.kpi, 'Internal Transactions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Trans ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of internal transactions']);\r\n const externalTransactions = infoItem([Item.kpi, 'External Transactions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Trans ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of external transactions']);\r\n const userTransactions = infoItem([Item.kpi, 'User Transactions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Trans ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of user transactions']);\r\n const sqlBlockedTrans = infoItem([Item.kpi, 'Blocked Transactions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of blocked SQL transactions']);\r\n const sqlStatements = infoItem([Item.kpi, 'Statements' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Stmt ], [Item.unit, Unit.StmtPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of finished SQL statements']);\r\n const cidRange = infoItem([Item.kpi, 'Active Commit ID Range' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Range between newest and oldest active commit ID']);\r\n const tidRange = infoItem([Item.kpi, 'Active Transaction ID Range'], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Range between newest and oldest active transaction ID']);\r\n const pendingRequestCount = infoItem([Item.kpi, 'Pending Request Count' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of pending session requests']);\r\n const mvccNum = infoItem([Item.kpi, 'Active Versions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of active MVCC versions']);\r\n const acquiredRecordLocks = infoItem([Item.kpi, 'Acquired Record Locks' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of acquired record locks']);\r\n const searchCount = infoItem([Item.kpi, 'Read Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Req ], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of read requests (select)']);\r\n const indexingCount = infoItem([Item.kpi, 'Write Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Req ], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of write requests (insert,update,delete)']);\r\n const mergeCount = infoItem([Item.kpi, 'Merge Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Req ], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of merge requests']);\r\n const unloadCount = infoItem([Item.kpi, 'Column Unloads' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Req ], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of column unloads']);\r\n const indexserverThreads = infoItem([Item.kpi, 'Active Threads' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of active threads']);\r\n const waitingThreads = infoItem([Item.kpi, 'Waiting Threads' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of waiting threads']);\r\n const totalThreads = infoItem([Item.kpi, 'Total Threads' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Total number of threads']);\r\n const activeSqlExecutors = infoItem([Item.kpi, 'Active SqlExecutors' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of active SqlExecutors']);\r\n const waitingSqlExecutors = infoItem([Item.kpi, 'Waiting SqlExecutors' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of waiting SqlExecutors']);\r\n const totalSqlExecutors = infoItem([Item.kpi, 'Total SqlExecutors' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Total number of SqlExecutors']);\r\n const dataWriteSize = infoItem([Item.kpi, 'Data Write Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to data area']);\r\n const dataWriteTime = infoItem([Item.kpi, 'Data Write Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to data area']);\r\n const logWriteSize = infoItem([Item.kpi, 'Log Write Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to log area']);\r\n const logWriteTime = infoItem([Item.kpi, 'Log Write Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to log area']);\r\n const dataReadSize = infoItem([Item.kpi, 'Data Read Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from data area']);\r\n const dataReadTime = infoItem([Item.kpi, 'Data Read Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for reading from data area']);\r\n const logReadSize = infoItem([Item.kpi, 'Log Read Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from log area']);\r\n const logReadTime = infoItem([Item.kpi, 'Log Read Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for reading from log area']);\r\n const dataBackupWriteSize = infoItem([Item.kpi, 'Data Backup Write Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to data backup']);\r\n const dataBackupWriteTime = infoItem([Item.kpi, 'Data Backup Write Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to data backup']);\r\n const logBackupWriteSize = infoItem([Item.kpi, 'Log Backup Write Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to log backup']);\r\n const logBackupWriteTime = infoItem([Item.kpi, 'Log Backup Write Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to log backup']);\r\n const mutexCollisionCount = infoItem([Item.kpi, 'Mutex Collisions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ColPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of collisions on mutexes']);\r\n const readWriteLockCollisionCount = infoItem([Item.kpi, 'Read/Write Lock Collisions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ColPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of collisions on read/write locks']);\r\n const admissinControlAdmitCount = infoItem([Item.kpi, 'Admitted Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests admitted by admission control']);\r\n const admissionControlRejectCount = infoItem([Item.kpi, 'Rejected Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests rejected by admission control']);\r\n const admissionControlWaitingRequests = infoItem([Item.kpi, 'Waiting Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests waiting in admission control queue']);\r\n const admissionControlWaitTime = infoItem([Item.kpi, 'Wait Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.SecPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Total wait time of session requests queued in admission control queue']);\r\n const admissionControlEnqueueCount = infoItem([Item.kpi, 'Enqueued Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests enqueued by admission control']);\r\n const admissionControlDequeueCount = infoItem([Item.kpi, 'Dequeued Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests dequeued by admission control']);\r\n const admissionControlTimeoutCount = infoItem([Item.kpi, 'Timed out Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of timed out session requests in admission control queue']);\r\n\r\n // generate Host\r\n const loadHistoryInfoHost: LoadHistoryInfoHost = {\r\n cpuUsed : cpuUsed ,\r\n memoryResident : memoryResident ,\r\n memoryTotalResident : memoryTotalResident,\r\n memoryUsed : memoryUsed ,\r\n memoryLimit : memoryLimit ,\r\n memorySize : memorySize ,\r\n diskUsed : diskUsed ,\r\n diskSize : diskSize ,\r\n networkIn : networkIn ,\r\n networkOut : networkOut ,\r\n swapIn : swapIn ,\r\n swapOut : swapOut ,\r\n };\r\n // generate Index Server\r\n const loadHistoryInfoIndexServer: LoadHistoryInfoIndexServer = {\r\n indexserverCpu : indexserverCpu ,\r\n indexserverCpuSys : indexserverCpuSys ,\r\n indexserverMemUsed : indexserverMemUsed ,\r\n indexserverMemLimit : indexserverMemLimit ,\r\n indexserverHandles : indexserverHandles ,\r\n indexserverPingtime : indexserverPingtime ,\r\n indexserverSwapIn : indexserverSwapIn ,\r\n };\r\n // generate SQL\r\n const loadHistoryInfoSQL: LoadHistoryInfoSQL = {\r\n sqlConnections : sqlConnections ,\r\n internalConnections : internalConnections ,\r\n externalConnections : externalConnections ,\r\n idleConnections : idleConnections ,\r\n sqlTransactions : sqlTransactions ,\r\n internalTransactions : internalTransactions,\r\n externalTransactions : externalTransactions,\r\n userTransactions : userTransactions ,\r\n sqlBlockedTrans : sqlBlockedTrans ,\r\n sqlStatements : sqlStatements ,\r\n cidRange : cidRange ,\r\n tidRange : tidRange ,\r\n pendingRequestCount : pendingRequestCount ,\r\n };\r\n // generate Row Store\r\n const loadHistoryInfoRowStore: LoadHistoryInfoRowStore = {\r\n mvccNum : mvccNum ,\r\n acquiredRecordLocks : acquiredRecordLocks,\r\n };\r\n // generate Column Store\r\n const loadHistoryInfoColumnStore: LoadHistoryInfoColumnStore = {\r\n searchCount : searchCount ,\r\n indexingCount : indexingCount,\r\n mergeCount : mergeCount ,\r\n unloadCount : unloadCount ,\r\n };\r\n // generate Threads\r\n const loadHistoryInfoThreads: LoadHistoryInfoThreads = {\r\n indexserverThreads : indexserverThreads ,\r\n waitingThreads : waitingThreads ,\r\n totalThreads : totalThreads ,\r\n activeSqlExecutors : activeSqlExecutors ,\r\n waitingSqlExecutors : waitingSqlExecutors,\r\n totalSqlExecutors : totalSqlExecutors ,\r\n };\r\n // generate Persistence\r\n const loadHistoryInfoPersistence: LoadHistoryInfoPersistence = {\r\n dataWriteSize : dataWriteSize,\r\n dataWriteTime : dataWriteTime,\r\n logWriteSize : logWriteSize ,\r\n logWriteTime : logWriteTime ,\r\n\r\n dataReadSize : dataReadSize ,\r\n dataReadTime : dataReadTime ,\r\n logReadSize : logReadSize ,\r\n logReadTime : logReadTime ,\r\n };\r\n // generate Backup\r\n const loadHistoryInfoBackup: LoadHistoryInfoBackup = {\r\n dataBackupWriteSize : dataBackupWriteSize,\r\n dataBackupWriteTime : dataBackupWriteTime,\r\n logBackupWriteSize : logBackupWriteSize ,\r\n logBackupWriteTime : logBackupWriteTime ,\r\n };\r\n // generate Synchronization Primitives\r\n const loadHistoryInfoSynchronizationPrimitives: LoadHistoryInfoSyncPrimitives = {\r\n mutexCollisionCount : mutexCollisionCount ,\r\n readWriteLockCollisionCount : readWriteLockCollisionCount,\r\n };\r\n // Session Admission Control\r\n const loadHistoryInfoSessionAdmissionControl: LoadHistoryInfoSessionAdmissionControl = {\r\n admissinControlAdmitCount : admissinControlAdmitCount ,\r\n admissionControlRejectCount : admissionControlRejectCount ,\r\n admissionControlWaitingRequests : admissionControlWaitingRequests,\r\n admissionControlWaitTime : admissionControlWaitTime ,\r\n admissionControlEnqueueCount : admissionControlEnqueueCount ,\r\n admissionControlDequeueCount : admissionControlDequeueCount ,\r\n admissionControlTimeoutCount : admissionControlTimeoutCount ,\r\n };\r\n\r\n return {\r\n 'Host': loadHistoryInfoHost,\r\n 'Index Server': loadHistoryInfoIndexServer,\r\n 'SQL': loadHistoryInfoSQL,\r\n 'Row Store': loadHistoryInfoRowStore,\r\n 'Column Store': loadHistoryInfoColumnStore,\r\n 'Threads': loadHistoryInfoThreads,\r\n 'Persistence': loadHistoryInfoPersistence,\r\n 'Backup': loadHistoryInfoBackup,\r\n 'Synchronization Primitives': loadHistoryInfoSynchronizationPrimitives,\r\n 'Session Admission Control': loadHistoryInfoSessionAdmissionControl\r\n };\r\n }\r\n\r\n /**\r\n * get rgbcolor object via red, green, blue and alpha.\r\n */\r\n private static _getRgbColor(red: number, green: number, blue: number, alpha: number): ColorRgba {\r\n return {red: red, green: green, blue: blue, alpha: alpha};\r\n }\r\n\r\n private static _getYScaleForItem(item: any, yScale: number): number {\r\n return yScale > item[Item.yScale] ? (item[Item.unit] === Unit.PCT ? 100 : yScale) : item[Item.yScale];\r\n }\r\n\r\n private static _getMaxValueOfGroup(groupItems: any): number {\r\n let max = 0;\r\n if (groupItems) {\r\n max = groupItems.reduce((maxValue, current) => {\r\n return current.Max > maxValue ? current.Max : maxValue;\r\n }, 0);\r\n }\r\n return max;\r\n }\r\n\r\n private _getLoadHistoryInfo(port: string): LoadHistoryInfo {\r\n if (!this._loadHistoryInfos[port]) {\r\n this._loadHistoryInfos[port] = UIService._generateLoadHistoryInfo();\r\n }\r\n return this._loadHistoryInfos[port];\r\n }\r\n\r\n private _getProcessingUnit(itemKey: string, port: string): UnitType {\r\n const historyDetailItem: LoadHistoryInfoItem = this._getItemByKey(itemKey, port);\r\n if (historyDetailItem) {\r\n let unit = historyDetailItem.Unit;\r\n if (!unit) {\r\n unit = '';\r\n }\r\n return UIService._unitType[unit];\r\n }\r\n return UnitType.TypeEA; // default return value\r\n }\r\n\r\n private _setOverview (key: string, overview: LoadHistoryInfoItem, unit: UnitType, port: string) {\r\n const historyDetailItem = this._getItemByKey(key, port);\r\n if (historyDetailItem) {\r\n historyDetailItem.Max = overview.Max >= 0 ? overview.Max : 0;\r\n historyDetailItem.Average = overview.Average >= 0 ? overview.Average : 0;\r\n // only TYPE_CONVERSION_MBSEC and TYPE_CONVERTION_SEC (eg: MB/s, req/s stmt/s...) need sum\r\n historyDetailItem.Sum = isUnitTimeRelated(unit) ? (overview.Sum >= 0 ? overview.Sum : 0) : '-';\r\n historyDetailItem.Last = overview.Last >= 0 ? overview.Last : 0;\r\n }\r\n }\r\n\r\n /**\r\n * convert unit values (eg: byte to MB or GB) and generate the control data (sum, max, avg) for one row\r\n */\r\n private _convertUnitAndGenerateRowControlData(row: ChartContentDataItem[], key: string, unit: UnitType, port: string): Promise<void> {\r\n return new Promise(resolve => {\r\n if (row) {\r\n const overview: LoadHistoryInfoItem = {Sum: 0, Max: 0, Average: 0, Last: 0};\r\n const ignoredTailLineNum = getIgnoredLineNumFromTail();\r\n let invalidCount = 0;\r\n // convert unit and calculate the overview data, skip the first, and last three rows.\r\n row.forEach((item, index, arrayData) => {\r\n // skip ignored line(s) from tail\r\n if (index <= row.length - ignoredTailLineNum - 1) {\r\n if (arrayData[index].y >= 0) {\r\n arrayData[index].y = getValueByUnit(item.y, unit);\r\n overview.Sum += arrayData[index].y;\r\n if (isUnitTimeRelated(unit)) {\r\n if (index === 0) {\r\n // according to hana studio, for those time related column, the first value is set to 0\r\n arrayData[index].y = 0;\r\n } else {\r\n // get value for unit like: MB/s (value / seconds)\r\n const timeDiff = arrayData[index].x - arrayData[index - 1].x;\r\n arrayData[index].y = timeDiff !== 0 ? arrayData[index].y * 1000 / timeDiff : 0;\r\n }\r\n }\r\n arrayData[index].y = getRoundedValue(arrayData[index].y);\r\n\r\n if (arrayData[index].y > overview.Max) {\r\n overview.Max = arrayData[index].y;\r\n }\r\n } else {\r\n // set value to 0, for those points with value -1 or < 0\r\n arrayData[index].y = 0;\r\n // invalid count + 1, for calculating the average (not time relative)\r\n invalidCount++;\r\n }\r\n }\r\n });\r\n\r\n if (row.length >= (ignoredTailLineNum + invalidCount)) {\r\n if (isUnitTimeRelated(unit)) {\r\n const timePeriod = row[row.length - ignoredTailLineNum - 1].x - row[0].x;\r\n overview.Average = timePeriod !== 0 ? getRoundedValue(overview.Sum * 1000 / timePeriod) : 0;\r\n } else {\r\n const validItemCount = row.length - ignoredTailLineNum - invalidCount;\r\n overview.Average = validItemCount > 0 ? getRoundedValue(overview.Sum / validItemCount) : 0;\r\n }\r\n overview.Last = row[row.length - ignoredTailLineNum - 1].y;\r\n overview.Sum = getRoundedValue(overview.Sum);\r\n overview.Max = getRoundedValue(overview.Max);\r\n\r\n // remove those ignored lines\r\n row.length = row.length - ignoredTailLineNum;\r\n }\r\n this._setOverview(key, overview, unit, port);\r\n }\r\n resolve();\r\n });\r\n }\r\n\r\n /**\r\n * Loop from all history items, put those history items which\r\n * have the same yScaleGroup together, using yScaleGroup as key.\r\n * eg: {__SCALE_GROUP_CPU:[item1, item2...], __SCALE_GROUP_UNKNOWN:[item3, item4...]}\r\n */\r\n private _getYScaleGroupWithHistoryItems(port: string): {} {\r\n const yScaleGroup = {};\r\n const loadHistoryInfo = this._getLoadHistoryInfo(port);\r\n\r\n Object.keys(loadHistoryInfo).forEach(parentKey => {\r\n Object.keys(loadHistoryInfo[parentKey]).forEach(childKey => {\r\n const detailItem = loadHistoryInfo[parentKey][childKey];\r\n const yScaleGroupKey = detailItem._YScaleGroup;\r\n if (!yScaleGroup[yScaleGroupKey]) {\r\n yScaleGroup[yScaleGroupKey] = [];\r\n }\r\n yScaleGroup[yScaleGroupKey].push(detailItem);\r\n });\r\n });\r\n return yScaleGroup;\r\n }\r\n\r\n private _setYScaleOfGroup(groupItems: any, group: ScaleGroup) {\r\n if (groupItems) {\r\n if (group === ScaleGroup.Unknown) {\r\n groupItems.forEach(item => item[Item.yScale] = UIService._getYScaleForItem(item, calculateYScale(item.Max)));\r\n } else {\r\n const yScale = calculateYScale(UIService._getMaxValueOfGroup(groupItems));\r\n groupItems.forEach(item => item[Item.yScale] = UIService._getYScaleForItem(item, yScale));\r\n }\r\n }\r\n }\r\n\r\n private _getItemByKey(key: string, port: string): any {\r\n const loadHistoryInfo = this._getLoadHistoryInfo(port);\r\n for ( const itemKey of Object.keys(loadHistoryInfo)) {\r\n if (key in loadHistoryInfo[itemKey]) {\r\n return loadHistoryInfo[itemKey][key];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * reset the load history info object, to prevent memory leak\r\n */\r\n public clearLoadHistoryInfos() {\r\n this._loadHistoryInfos = {};\r\n }\r\n\r\n /**\r\n * get all the data for the selection table\r\n */\r\n public getSelectionTableRows(headerKeys: string[], port: string, defaultDisplayItems: string[]): any[] {\r\n const rows: any[] = [];\r\n const loadHistoryInfo = this._getLoadHistoryInfo(port);\r\n\r\n const defaultItems = defaultDisplayItems && defaultDisplayItems.length > 0 ? defaultDisplayItems : this._DEFAULT_DISPLAY_ITEMS;\r\n\r\n Object.keys(loadHistoryInfo).forEach(keyParent => {\r\n rows.push({KPI: keyParent, header: true});\r\n const len = rows.length;\r\n rows.push(...Object.keys(loadHistoryInfo[keyParent])\r\n .filter(keyChild => headerKeys.includes(keyChild))\r\n .map(keyChild => {\r\n loadHistoryInfo[keyParent][keyChild].header = false;\r\n loadHistoryInfo[keyParent][keyChild].checked = defaultItems.includes(keyChild);\r\n return loadHistoryInfo[keyParent][keyChild];\r\n }));\r\n if (len === rows.length) {\r\n // no sub items, remove the header\r\n rows.pop();\r\n }\r\n });\r\n\r\n return rows;\r\n }\r\n\r\n /**\r\n * get all hidden columns. Those hidden columns = input hidden columns + default hidden columns\r\n * @param hideMeasureColumns the array contains the columns list that need to be hidden.\r\n */\r\n public getHiddenColumns(hideMeasureColumns: string[]): string[] {\r\n // only measure columns can be hidden\r\n const hideColumns = hideMeasureColumns ? hideMeasureColumns.filter(column => this._MEASURE_COLUMNS.includes(column)) : [];\r\n return hideColumns ? this._HIDED_COLUMNS.concat(hideColumns) : this._HIDED_COLUMNS;\r\n }\r\n\r\n /**\r\n * get header information and format it to {headKey: key, headText: text}\r\n */\r\n public getHeader(keys: string[], port: string): ChartContentHeader[] {\r\n return keys.map(key => {\r\n const item = this._getItemByKey(key, port);\r\n if (item != null && 'KPI' in item) {\r\n return ({key: key, text: item.KPI});\r\n } else {\r\n console.warn(`${key} is not configured.`);\r\n return null;\r\n }\r\n }).filter(key => key != null );\r\n }\r\n\r\n /**\r\n * Get the selected items, which need to be displayed on the chart.\r\n * @param headerKeys array that contains the keys of header\r\n * @param port the relative port\r\n * @param defaultDisplayItems the items list that will be displayed by default.\r\n */\r\n public getDisplayItems(headerKeys: string[], port: string, defaultDisplayItems: string[]): string[] {\r\n const selectionTable = this.getSelectionTableRows(headerKeys, port, defaultDisplayItems);\r\n return selectionTable.filter(row => row.checked).map(row => row.KPI);\r\n }\r\n\r\n /**\r\n * Get the Y Scale by the keys and port\r\n */\r\n public getYScale(keys: string[], port: string): number[] {\r\n const yScales = [];\r\n if (keys) {\r\n keys.forEach(key => {\r\n yScales.push(this._getItemByKey(key, port)[Item.yScale]);\r\n });\r\n }\r\n return yScales;\r\n }\r\n\r\n /**\r\n * Generate Y Scale for the port\r\n */\r\n public generateYScale(port: string): void {\r\n const yScaleGroup = this._getYScaleGroupWithHistoryItems(port);\r\n UIService._YScaleGroupList.forEach(group => {\r\n const historyItems = yScaleGroup[group];\r\n if (historyItems) {\r\n this._setYScaleOfGroup(historyItems, group);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * convert unit values (eg: byte to MB or GB) and generate the control data (sum, max, avg)\r\n * @param data the nameserver history data\r\n * @param header header list\r\n * @param port selected port\r\n */\r\n public convertUnitAndGenerateControlData(data: ChartContentDataItem[][], header: string[], port: string): Promise<any> {\r\n const promises = [];\r\n if (data && header) {\r\n data.forEach((row, index) => {\r\n if (row) {\r\n // get detail history item key, like indexserverCpu\r\n const itemKey = header[index];\r\n const unit = this._getProcessingUnit(itemKey, port);\r\n promises.push(this._convertUnitAndGenerateRowControlData(row, itemKey, unit, port));\r\n }\r\n });\r\n }\r\n return Promise.all(promises);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport {\r\n Chart,\r\n ChartConfiguration,\r\n ChartDataset,\r\n registerables,\r\n TimeScale,\r\n LinearScale,\r\n CategoryScale,\r\n PointElement,\r\n LineElement,\r\n Title,\r\n Tooltip,\r\n Legend,\r\n Filler,\r\n Decimation\r\n} from 'chart.js';\r\nimport 'chartjs-adapter-moment';\r\nimport zoomPlugin from 'chartjs-plugin-zoom';\r\nimport { getColorString, getNumberWithCommas, randomColor } from '../utils';\r\nimport { UIService } from './ui.service';\r\nimport { ChartContentDataItem, LegendColor, Item, Unit } from '../types';\r\n\r\n// Register Chart.js components and plugins\r\nChart.register(\r\n ...registerables,\r\n TimeScale,\r\n LinearScale,\r\n CategoryScale,\r\n PointElement,\r\n LineElement,\r\n Title,\r\n Tooltip,\r\n Legend,\r\n Filler,\r\n Decimation,\r\n zoomPlugin\r\n);\r\n\r\nconst MAX_POINTS_TO_RENDER = 100;\r\n\r\n@Injectable()\r\nexport class ChartService {\r\n private _chart: Chart;\r\n\r\n /**\r\n * toggle the dataset status of the chart, synchronously\r\n */\r\n private static _toggleDataSet(dataSetIndex: number, chart: Chart, hidden: boolean): void {\r\n // meta.hidden = false and dataset.hidden = false --> show\r\n // meta.hidden = false and dataset.hidden = true --> show\r\n // meta.hidden = null and dataset.hidden = false -> show\r\n // meta.hidden = null and dataset.hidden = true -> hide\r\n // in the first case (false, false), needs to click legend twice to\r\n // hide the dataset, because the first click only set meta.hidden = null)\r\n if (dataSetIndex != null && chart != null) {\r\n const meta = chart.getDatasetMeta(dataSetIndex);\r\n if (meta) {\r\n if (!hidden) {\r\n // display the item, if dataset hidden is false, set hidden of meta to null,\r\n meta.hidden = !chart.data.datasets[dataSetIndex].hidden ? null : hidden;\r\n } else {\r\n meta.hidden = hidden;\r\n }\r\n }\r\n }\r\n }\r\n \r\n private static _restoreDataSetStatus(chart: Chart, datasetIndex: number, status: {metaStatus: boolean, datasetStatus: boolean}): void {\r\n if (chart && chart.data && chart.data.datasets && chart.getDatasetMeta(datasetIndex) && status) {\r\n chart.data.datasets[datasetIndex].hidden = status.datasetStatus;\r\n chart.getDatasetMeta(datasetIndex).hidden = status.metaStatus;\r\n }\r\n }\r\n\r\n /**\r\n * initialize/clear the configuration for the chart\r\n */\r\n private static _initConfig(chart: any): void {\r\n // init data sets\r\n if (chart.data?.datasets) {\r\n chart.data.datasets.length = 0;\r\n chart.data.datasets = void 0;\r\n chart.data = void 0;\r\n }\r\n // init options\r\n if (chart.options?.scales) {\r\n chart.options.scales = void 0;\r\n chart.options = void 0;\r\n }\r\n }\r\n\r\n /**\r\n * Generate DataSets by the data and header information\r\n */\r\n private static _generateDataSets(data: ChartContentDataItem[][], header: string[], headerKey: string[], defaultItems: string[]): ChartDataset<'line'>[] {\r\n const alpha = 0.5;\r\n const colors: LegendColor = UIService.getColors(alpha);\r\n return data.map((item, i) => {\r\n const color = colors[headerKey[i]] ? getColorString(colors[headerKey[i]]) : randomColor(alpha);\r\n return {\r\n borderColor: color,\r\n backgroundColor: color,\r\n borderWidth: 1,\r\n spanGaps: false,\r\n label: header[i],\r\n data: data[i],\r\n fill: false,\r\n yAxisID: `y-axis-${i}`,\r\n hidden: !defaultItems.includes(header[i]),\r\n pointRadius: 0,\r\n pointHitRadius: 5,\r\n pointHoverRadius: 5,\r\n // Enable smooth curves for more natural line appearance\r\n tension: 0.2,\r\n // Enable decimation for each dataset\r\n parsing: false,\r\n normalized: true\r\n };\r\n });\r\n }\r\n\r\n private static _generateScales(timeArray: number[], data: ChartContentDataItem[][], yScaleArray: number[]): any {\r\n const scales: any = {\r\n x: {\r\n type: 'time',\r\n time: {\r\n displayFormats: {\r\n 'millisecond': 'MMMDD HH:mm',\r\n 'second': 'MMMDD HH:mm',\r\n 'minute': 'MMMDD HH:mm',\r\n 'hour': 'MMMDD HH',\r\n 'day': 'MMMDD',\r\n 'week': 'MMMDD',\r\n 'month': 'MMM YYYY',\r\n 'quarter': 'MMM YYYY',\r\n 'year': 'MMM YYYY',\r\n },\r\n tooltipFormat: 'll HH:mm:ss'\r\n },\r\n min: timeArray[0],\r\n max: timeArray[timeArray.length - 1],\r\n ticks: {\r\n source: 'auto',\r\n maxRotation: 0,\r\n autoSkip: true,\r\n // callback: function(val, index) {\r\n // // Hide every 2nd tick label\r\n // return index % 2 === 0? this.getLabelForValue(val) : '';\r\n // },\r\n },\r\n reverse: false\r\n }\r\n };\r\n\r\n // Add Y axes\r\n data.forEach((item, i) => {\r\n scales[`y-axis-${i}`] = {\r\n type: 'linear',\r\n display: false,\r\n position: 'left',\r\n grid: {\r\n drawOnChartArea: i === 0, // only show grid for first axis\r\n },\r\n min: 0,\r\n max: yScaleArray[i]\r\n };\r\n });\r\n\r\n return scales;\r\n }\r\n\r\n /**\r\n * generate configuration for chart\r\n */\r\n private static _generateChartConfig(time: number[],\r\n data: ChartContentDataItem[][],\r\n yScale: number[],\r\n header: string[],\r\n headerKey: string[],\r\n selection: SelectionModel<any>,\r\n tableSource: any,\r\n title: string,\r\n defaultItems: string[],\r\n zoomCallback: any): ChartConfiguration<'line'> {\r\n return {\r\n type: 'line',\r\n data: {\r\n datasets: ChartService._generateDataSets(data, header, headerKey, defaultItems)\r\n },\r\n options: {\r\n layout: {\r\n padding: {\r\n right: 25 // Add padding to the right side of the chart\r\n }\r\n },\r\n interaction: {\r\n intersect: true, // true means not a range hit\r\n axis: 'x',\r\n mode: 'nearest'\r\n },\r\n responsive: true,\r\n animation: false, // must disable it otherwise zoomin will hang\r\n onHover: (event: any, elements: any) => {\r\n const target = event.native?.target || event.target;\r\n if (target) {\r\n (target as HTMLElement).style.cursor = elements?.length > 0 ? 'pointer' : 'default';\r\n }\r\n },\r\n elements: {point: { radius: 0, hitRadius: 5, hoverRadius: 5 }}, // set radius to 0 not to display point\r\n parsing: false,\r\n normalized: true,\r\n datasets: {line: { pointRadius: 0, pointHitRadius: 5, pointHoverRadius: 5}},\r\n plugins: {\r\n legend: {\r\n position: 'bottom',\r\n onHover: (event: any, legendItem: any) => {\r\n const target = event.native?.target || event.target;\r\n if (target) {\r\n (target as HTMLElement).style.cursor = 'pointer';\r\n }\r\n },\r\n labels: {\r\n filter: (legendItem) => selection.isSelected(tableSource.find(row => legendItem.text === row.KPI))\r\n }\r\n },\r\n title: {\r\n display: true,\r\n text: title\r\n },\r\n tooltip: {\r\n callbacks: {\r\n label: function(context) {\r\n // format numbers with commas and add unit information\r\n const label = context.dataset.label || '';\r\n if (label) {\r\n // get unit (eg: MB, GB, MB/s, % and so on)\r\n const rowItem = tableSource.find(controlTableRow => label === controlTableRow.KPI) || '';\r\n const unit = rowItem[Item.unit] && rowItem[Item.unit] !== Unit.PCT ? ` ${rowItem[Item.unit]}` : rowItem[Item.unit] || '';\r\n return `${label}: ${getNumberWithCommas(context.parsed.y)}${unit}`;\r\n } else {\r\n return getNumberWithCommas(context.parsed.y);\r\n }\r\n }\r\n }\r\n },\r\n // downsampling\r\n decimation: {\r\n enabled: true,\r\n algorithm: 'lttb', // Largest-Triangle-Three-Buckets algorithm\r\n samples: 500, // Increased samples for better quality\r\n threshold: 1 // increase it may hang the ui due to swith of using/not using downsampling, disable it (set it to 0), will slowdown average zoom in.\r\n },\r\n zoom: {\r\n limits: {\r\n x: {\r\n min: 'original',\r\n max: 'original',\r\n //minRange: 180000 // 3 min the min range that can be zoomed\r\n }\r\n },\r\n pan: {\r\n enabled: true,\r\n mode: 'x',\r\n modifierKey: 'ctrl'\r\n },\r\n zoom: {\r\n // wheel: {\r\n // enabled: true,\r\n // speed: 0.02 \r\n // },\r\n // pinch: {\r\n // enabled: true\r\n // },\r\n drag: {\r\n enabled: true,\r\n threshold: 10,\r\n drawTime: 'beforeDraw'\r\n },\r\n mode: 'x',\r\n onZoom: zoomCallback,\r\n onZoomComplete: (context => {\r\n const chart = context?.chart;\r\n if (!chart?.data?.datasets) {\r\n return;\r\n }\r\n // make point visible when current points are less than MAX_POINTS_TO_RENDER\r\n const pointRadiusChangeFlag = chart.data.datasets.some(dataset => dataset.data.length <= MAX_POINTS_TO_RENDER);\r\n const pointRadius = pointRadiusChangeFlag ? 2 : 0;\r\n chart.data.datasets.forEach((dataset: any) => {\r\n dataset.pointRadius = pointRadius;\r\n });\r\n\r\n if (chart.options?.elements?.point) {\r\n chart.options.elements.point.radius = pointRadius;\r\n }\r\n chart.update();\r\n })\r\n }\r\n }\r\n },\r\n scales: ChartService._generateScales(time, data, yScale)\r\n }\r\n };\r\n }\r\n\r\n private _getDataSetIndexByLabel(label: string, chart: Chart): number {\r\n if (chart.data && chart.data.datasets) {\r\n return chart.data.datasets.findIndex(dataset => dataset.label === label);\r\n }\r\n return -1;\r\n }\r\n\r\n /**\r\n * WORKAROUND: Setup mousemove event listener to fix Chart.js tooltip issue\r\n * Issue: https://github.com/chartjs/Chart.js/issues/11972\r\n * TODO: Remove this entire method when the Chart.js bug is fixed\r\n */\r\n private _setupTooltipWorkaround(chart: Chart): void {\r\n const canvas = chart.canvas;\r\n const mouseMoveHandler = (event: MouseEvent) => {\r\n const rect = canvas.getBoundingClientRect();\r\n const x = event.clientX - rect.left;\r\n const y = event.clientY - rect.top;\r\n \r\n // Check if mouse is within chart area\r\n const chartArea = chart.chartArea;\r\n if (chartArea) {\r\n const isInChartArea = x >= chartArea.left && x <= chartArea.right && \r\n y <= chartArea.bottom && y >= chartArea.top;\r\n \r\n // Get legend area (legend is positioned at bottom)\r\n const legendArea = chart.legend;\r\n let isInLegendArea = false;\r\n if (legendArea && (legendArea as any).legendHitBoxes) {\r\n isInLegendArea = (legendArea as any).legendHitBoxes.some((hitBox: any) => \r\n x >= hitBox.left && x <= hitBox.left + hitBox.width &&\r\n y >= hitBox.top && y <= hitBox.top + hitBox.height\r\n );\r\n }\r\n \r\n if (!isInChartArea && !isInLegendArea) {\r\n // Mouse is in axis area (but not legend), force hide tooltip and active points\r\n if (chart.tooltip) {\r\n chart.tooltip.setActiveElements([], {x: 0, y: 0});\r\n }\r\n // Clear active elements to hide hover points\r\n chart.setActiveElements([]);\r\n chart.update('none');\r\n canvas.style.cursor = 'default';\r\n }\r\n }\r\n };\r\n \r\n canvas.addEventListener('mousemove', mouseMoveHandler);\r\n \r\n // Store the handler for cleanup\r\n (chart as any)._mouseMoveHandler = mouseMoveHandler;\r\n }\r\n\r\n /**\r\n * WORKAROUND: Clean up mousemove event listener for Chart.js tooltip issue\r\n * Issue: https://github.com/chartjs/Chart.js/issues/11972\r\n * TODO: Remove this entire method when the Chart.js bug is fixed\r\n */\r\n private _cleanupTooltipWorkaround(chart: Chart): void {\r\n const canvas = chart.canvas;\r\n const mouseMoveHandler = (chart as any)._mouseMoveHandler;\r\n if (canvas && mouseMoveHandler) {\r\n canvas.removeEventListener('mousemove', mouseMoveHandler);\r\n }\r\n }\r\n\r\n /**\r\n * destroy the chart, release the resource of the chart\r\n */\r\n private _destroyChart(chart: Chart): Promise<void> {\r\n return new Promise((resolve) => {\r\n if (chart) {\r\n // WORKAROUND: Clean up tooltip workaround - TODO: Remove when Chart.js bug is fixed\r\n this._cleanupTooltipWorkaround(chart);\r\n chart.destroy();\r\n }\r\n resolve();\r\n });\r\n }\r\n \r\n /**\r\n * update/refresh the chart\r\n */\r\n private _updateChart(chart: Chart): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n if (chart) {\r\n chart.update();\r\n resolve();\r\n } else {\r\n reject('Updating chart failed, error: the chart object is empty.');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * reset zoom of the chart\r\n */\r\n private _resetZoom(chart: any): Promise<{metaStatus: boolean, datasetStatus: boolean}[]> {\r\n return new Promise((resolve, reject) => {\r\n if (chart) {\r\n const datasetStatusBeforeReset = [];\r\n if (chart.data && chart.data.datasets) {\r\n chart.data.datasets.forEach((dataset, index) => {\r\n const meta = chart.getDatasetMeta(index);\r\n if (meta) {\r\n datasetStatusBeforeReset[index] = {metaStatus: meta.hidden, datasetStatus: dataset.hidden};\r\n } else {\r\n reject(`Internal error, can not find the meta ${index}.`);\r\n }\r\n });\r\n }\r\n // Use the zoom plugin's resetZoom method\r\n if (chart.resetZoom) {\r\n chart.resetZoom();\r\n }\r\n resolve(datasetStatusBeforeReset);\r\n } else {\r\n reject('Resetting chart failed, error: the chart object is empty.');\r\n }\r\n });\r\n }\r\n \r\n /**\r\n * Reset Chart to initial status\r\n * If legend is already selected/unselected from the list, it wouldn't be restored.\r\n * @param dataSourceData the data sets of the chart\r\n * @param selection selection status list\r\n */\r\n public resetChart(dataSourceData: any, selection: SelectionModel<any>): Promise <any> {\r\n return this._resetZoom(this._chart).then((datasetStatusBeforeZoom) => {\r\n // reset the data set by the selection status\r\n dataSourceData.filter(row => !row.header).forEach(row => {\r\n const index = this._getDataSetIndexByLabel(row.KPI, this._chart);\r\n if (!selection.isSelected(row)) {\r\n ChartService._toggleDataSet(index, this._chart, true);\r\n } else {\r\n ChartService._restoreDataSetStatus(this._chart, index, datasetStatusBeforeZoom[index]);\r\n }\r\n });\r\n return this._updateChart(this._chart);\r\n });\r\n }\r\n\r\n /**\r\n * destroy the chart and reinitialize the configuration of the chart\r\n */\r\n public destroyChart(): Promise<any> {\r\n return this._destroyChart(this._chart).then(() => {\r\n if (this._chart) {\r\n ChartService._initConfig(this._chart);\r\n this._chart = void 0;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * generate configuration for chart and create the chart object.\r\n */\r\n public buildChart(time: number[],\r\n data: ChartContentDataItem[][],\r\n yScale: number[],\r\n header: string[],\r\n headerKey: string[],\r\n selection: SelectionModel<any>,\r\n tableSource: any,\r\n title: string,\r\n defaultItems: string[],\r\n zoomCB): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n const ctx = (<HTMLCanvasElement> document.getElementById('chartNameServerHistory'))?.getContext('2d');\r\n if (ctx) {\r\n this._chart = new Chart(ctx, ChartService._generateChartConfig(time, data, yScale, header, headerKey, selection, tableSource, title, defaultItems, zoomCB));\r\n // WORKAROUND: Setup tooltip workaround - TODO: Remove when Chart.js bug is fixed\r\n this._setupTooltipWorkaround(this._chart);\r\n resolve();\r\n } else {\r\n reject('Can not find the canvas.');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * show/hide the relative data set\r\n */\r\n public toggleDataInChart(label: string, hide: boolean): Promise<any> {\r\n return new Promise((resolve) => {\r\n ChartService._toggleDataSet(this._getDataSetIndexByLabel(label, this._chart), this._chart, hide);\r\n resolve(this._updateChart(this._chart));\r\n });\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {\r\n calculateValue,\r\n calculateValue4Time,\r\n getDefaultPort,\r\n getPort,\r\n getTimeFromTimeZone,\r\n isSamePort,\r\n isValidPort,\r\n printProcessedTime,\r\n validateData\r\n} from '../utils';\r\nimport {parse} from 'papaparse';\r\nimport {Abort, ChartContent, ChartContentData, ChartContentTime} from '../types';\r\n\r\n/**\r\n * prevent browser from crashing, set the max rows limitation.\r\n * This could be overwritten by the input:maxRowsLimitation of the component.\r\n */\r\nconst _DEFAULT_MAX_ROWS_IN_MEMORY = 100000;\r\n\r\n@Injectable()\r\nexport class FileService {\r\n /**\r\n * prevent browser from crashing, set the max rows limitation.\r\n * @param limitation if this parameter is not null, the default value will be overwritten by this one.\r\n */\r\n private static _getMaxRowsLimitation(limitation: any = null) {\r\n if (limitation == null || isNaN(limitation) || limitation.length === 0) {\r\n return _DEFAULT_MAX_ROWS_IN_MEMORY;\r\n }\r\n return Number(limitation);\r\n }\r\n\r\n /**\r\n * get all available ports from data\r\n */\r\n private static _getPorts(data: string[][], firstChunk: boolean, ports: string[]) {\r\n let line = 0;\r\n if (firstChunk) {\r\n // start from line 3\r\n line = 2;\r\n }\r\n\r\n for (; line < data.length; line++) {\r\n const dataItem = data[line][1];\r\n if (dataItem != null && dataItem.length > 0) {\r\n if (isValidPort(dataItem) && ports.indexOf(dataItem) === -1) {\r\n ports.push(dataItem);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * get the time column from the analyzed data\r\n * @param data the analyzed data\r\n * @param firstChunk whether it's first chunk or not\r\n * @param startTime selected starting time. It's millisecond, need to be converted second.\r\n * @param endTime selected ending time. It's millisecond, need to be converted second.\r\n * @param lastProcessedTime last processed time form last chunk\r\n * @param time time object which contains the time data for all ports\r\n * @param selectedPort if the selected port is empty (did not select any port), all ports info are needed\r\n * @param isMDC flag for MDC system\r\n * @param timezone selected timezone\r\n * @param maxRowsLimitation prevent browser from crashing, set the max rows limitation.\r\n * This comes from the input: maxRowsLimitation of the component.\r\n */\r\n private static _getTimeColumn(data: string[][],\r\n firstChunk: boolean,\r\n startTime: number,\r\n endTime: number,\r\n lastProcessedTime: number,\r\n time: ChartContentTime,\r\n selectedPort: string,\r\n isMDC: boolean,\r\n timezone: string,\r\n maxRowsLimitation: any) {\r\n // convert millisecond to second for startTime and endTime.\r\n startTime = startTime / 1000;\r\n endTime = endTime / 1000;\r\n const timeColumn = 2;\r\n let startLine = 0;\r\n let iStart = -1;\r\n let iEnd = -1;\r\n\r\n let curTime = lastProcessedTime;\r\n let lastProcessedTimeReturn;\r\n let totalNum = 0;\r\n let mdcFlag = isMDC;\r\n const defaultPort = getDefaultPort();\r\n const maxRowNum = this._getMaxRowsLimitation(maxRowsLimitation);\r\n\r\n if (firstChunk) {\r\n if (curTime >= startTime && curTime <= endTime) {\r\n iStart = 1; // start from first line\r\n\r\n /** Modified at 2018/10/10,\r\n * in some case, eg: the nameserver history trace gets modified by Kook, Jin Young's python script,\r\n * the port show in the first line as well, and does not like the non-mdc system, this kind of file has\r\n * one port in it. The history for non-mdc system doesn't have port info in the port column.*/\r\n\r\n // get port for the line 1.\r\n const firstLinePort = getPort(data[1][1]);\r\n // init time array for the first line.\r\n if (!selectedPort || selectedPort.length === 0 || isSamePort(firstLinePort, selectedPort, mdcFlag)) {\r\n // does not select any port or\r\n // it's non-mdc (mdcFlag is false at the beginning) system and the selected port is the first line port\r\n time[firstLinePort] = [];\r\n time[firstLinePort][0] = curTime * 1000;\r\n }\r\n }\r\n lastProcessedTimeReturn = curTime;\r\n startLine = 2;\r\n }\r\n\r\n // get current total number\r\n Object.keys(time).forEach(key => {\r\n if (time[key]) {\r\n totalNum += time[key].length;\r\n }\r\n });\r\n\r\n if (curTime == null) {\r\n console.error('getTimeColumn', 'Can not get the time from the file, internal error!');\r\n return {indexStart: null, indexEnd: null, lastProcessedTime: null, isMDC: null};\r\n }\r\n\r\n for (let i = startLine; i < data.length; i++) {\r\n // sometime the last line is empty, need to be skipped.\r\n if (data[i] == null || data[i].length === 0 || (data[i].length === 1 && data[i][0].length === 0)) {\r\n continue;\r\n }\r\n\r\n // get port number and initialize the relative port array in time\r\n const port = getPort(data[i][1]); // data[i][1] == null || data[i][1].length == 0 ? __DEFAULT_PORT : data[i][1];\r\n if (!(port in time)) {\r\n // add undefined port to time, then we can find all ports in time\r\n time[port] = void 0;\r\n }\r\n if (time[port] == null && isSamePort(port, selectedPort, mdcFlag)) {\r\n time[port] = [];\r\n // if other ports exists in this file, default port will be set to undefined.\r\n if (!mdcFlag && port !== defaultPort && time[defaultPort]) {\r\n // update the total num;\r\n totalNum -= time[defaultPort].length;\r\n time[defaultPort].length = 0;\r\n time[defaultPort] = void 0;\r\n mdcFlag = true;\r\n }\r\n }\r\n curTime = calculateValue4Time(curTime, data[i][timeColumn], timezone);\r\n if (curTime > endTime) {\r\n if (iEnd < 0) {\r\n iEnd = i - 1;\r\n }\r\n break;\r\n }\r\n if (iStart >= 0) {\r\n if (time[port]) {\r\n // not null means it's the selected port\r\n time[port][time[port].length] = curTime * 1000;\r\n totalNum ++;\r\n }\r\n } else {\r\n if (curTime >= startTime && curTime <= endTime) {\r\n if (time[port]) {\r\n // only selected port counted in\r\n if (iStart < 0) {\r\n iStart = i;\r\n }\r\n time[port][time[port].length] = curTime * 1000;\r\n totalNum ++;\r\n }\r\n }\r\n }\r\n // last processed time need to be recorded anyway\r\n lastProcessedTimeReturn = curTime;\r\n\r\n if (totalNum >= maxRowNum) {\r\n iEnd = i;\r\n break;\r\n }\r\n }\r\n return {indexStart: iStart, indexEnd: iEnd, lastProcessedTime: lastProcessedTimeReturn, isMDC: mdcFlag};\r\n }\r\n\r\n /**\r\n * Get data for all columns\r\n * @param columnNum the total number of columns. For mdc system,\r\n * the length of each row is different. Host relative data does not exist in tenant line.\r\n * Needs to use column number from the first line.\r\n * @param data data parsed by papa\r\n * @param firstChunk the flag which identifies whether it's the first chunk or not.\r\n * @param time\r\n * @param indexStart\r\n * @param indexEnd\r\n * @param lastProcessedLine\r\n * @param resultData the result data after analyzed\r\n * @param selectedPort\r\n * @param isMDC\r\n */\r\n private static _getDataColumns(columnNum: number,\r\n data: string[][],\r\n firstChunk: boolean,\r\n time: ChartContentTime,\r\n indexStart: number,\r\n indexEnd: number,\r\n lastProcessedLine: number[],\r\n resultData: ChartContentData,\r\n selectedPort: string,\r\n isMDC: boolean) {\r\n let startLine = 0;\r\n // for mdc system, the length is not correct (host relative data only exists in the \"empty\" port line).\r\n // Needs to use header from the first line.\r\n // const columnNum = data[0].length;\r\n\r\n if (firstChunk) {\r\n /**\r\n * Modified at 2018/10/10,\r\n * in some case, eg: the nameserver history trace gets modified by Kook, Jin Young's python script,\r\n * the port show in the first line as well, and does not like the non-mdc system, this kind of file has\r\n * one port in it. The history for non-mdc system doesn't have port info in the port column.\r\n */\r\n\r\n // get port for the line 1.\r\n const firstLinePort = getPort(data[1][1]);\r\n // Initialize data column with default 'DEFAULT' port if it's not MDC system. MDC system, 'DEFAULT' gets ignored\r\n if (!isMDC && time[firstLinePort]) {\r\n resultData[firstLinePort] = [];\r\n // removed below logic, because first line is the real number, do not need to do the convert.\r\n // curLine = data[1].slice(3).map(Number);\r\n for (let j = 3; j < columnNum; j++) {\r\n const index = j - 3;\r\n\r\n // initialize data array for all columns of the default '0000' port\r\n resultData[firstLinePort][index] = [];\r\n // get the first line data of the column if it's included\r\n if (indexStart === 1) {\r\n resultData[firstLinePort][index][0] = {x: time[firstLinePort][0], y: lastProcessedLine[index]};\r\n }\r\n }\r\n }\r\n startLine = 2;\r\n }\r\n\r\n for (let j = 3; j < columnNum; j++) {\r\n const index = j - 3;\r\n for (let i = startLine; i < data.length; i++) {\r\n // sometime the last line is empty, need to be skipped.\r\n if (data[i] == null || data[i].length === 0 || (data[i].length === 1 && data[i][0].length === 0)) {\r\n continue;\r\n }\r\n\r\n // get port number and initialize the relative port array in data\r\n const port = getPort(data[i][1]);\r\n if (resultData[port] == null && isSamePort(port, selectedPort, isMDC)) {\r\n resultData[port] = [];\r\n }\r\n if (resultData[port] && resultData[port][index] == null) {\r\n resultData[port][index] = [];\r\n }\r\n\r\n lastProcessedLine[index] = calculateValue(lastProcessedLine[index], data[i][j]);\r\n if (i >= indexStart && (i <= indexEnd || indexEnd < 0) && indexStart >= 0) {\r\n if (resultData[port]) {\r\n const length = resultData[port][index].length;\r\n resultData[port][index][length] = {x: time[port][length], y: lastProcessedLine[index]};\r\n }\r\n } else if (indexEnd > 0 && i > indexEnd) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get Chart data from provided file.\r\n * @param file the nameserver history file\r\n * @param startTime\r\n * @param endTime\r\n * @param port\r\n * @param timezone\r\n * @param maxRowsLimitation prevent browser from crashing, set the max rows limitation.\r\n * @param progress call back function for updating progress\r\n */\r\n public getChartContentFromFile(file: File,\r\n startTime: number,\r\n endTime: number,\r\n port: string,\r\n timezone: string,\r\n maxRowsLimitation: any,\r\n progress: any): Promise<ChartContent> {\r\n // load done, beginning parsing\r\n const beginTime = new Date();\r\n let firstChunk = true;\r\n // save last processed data just for the later calculation\r\n let lastProcessedData;\r\n // save last processed time just for the later calculation\r\n let lastProcessedTime;\r\n // save last processed cursor position for progress calculation.\r\n // let lastProcessedCursor = 0;\r\n let indexStart = -1, indexEnd = -1;\r\n const time: ChartContentTime = {};\r\n const data: ChartContentData = {};\r\n let header;\r\n let host;\r\n let isMDC = false;\r\n let columnNum;\r\n let abortType: Abort;\r\n\r\n const rejectAndAbort = (reject, parser) => {\r\n if (progress) {\r\n progress(100);\r\n }\r\n reject(`${file.name} is empty or the format is not correct.`);\r\n parser.abort();\r\n };\r\n return new Promise((resolve, reject) => {\r\n parse(file, {\r\n chunk: (results, parser) => {\r\n // the progress increment of this step\r\n // let analyzeStepProgress = (results.meta.cursor - lastProcessedCursor) / file.size * 100;\r\n printProcessedTime(beginTime, 'step1');\r\n if (indexEnd >= 0) {\r\n // already finished, quite.\r\n return;\r\n } else {\r\n // reset start point\r\n indexStart = -1;\r\n }\r\n\r\n // get time column\r\n if (firstChunk) {\r\n if (!validateData(results.data)) {\r\n return rejectAndAbort(reject, parser);\r\n }\r\n\r\n // initialize the header\r\n header = results.data[0].slice(3);\r\n // get column number\r\n columnNum = results.data[0].length;\r\n // get host name\r\n host = results.data[1][0];\r\n // get the first line time info from first line, it is a real number, do not need to do the convert with \">,<\".\r\n lastProcessedTime = getTimeFromTimeZone(parseFloat(results.data[1][2]), timezone);\r\n // get the first line data info from first line, it is a real number, do not need to do the convert with \">,<\".\r\n lastProcessedData = results.data[1].slice(3).map(Number);\r\n }\r\n\r\n printProcessedTime(beginTime, 'step2');\r\n\r\n if (!lastProcessedData) {\r\n return rejectAndAbort(reject, parser);\r\n }\r\n\r\n // get time column\r\n ({indexStart, indexEnd, lastProcessedTime, isMDC} = FileService._getTimeColumn(\r\n results.data, firstChunk, startTime, endTime, lastProcessedTime, time, port, isMDC, timezone, maxRowsLimitation));\r\n printProcessedTime(beginTime, 'step3');\r\n\r\n if (indexStart == null && indexEnd == null && lastProcessedTime == null && isMDC == null) {\r\n return rejectAndAbort(reject, parser);\r\n }\r\n\r\n // get all other data columns\r\n FileService._getDataColumns(\r\n columnNum, results.data, firstChunk, time, indexStart, indexEnd, lastProcessedData, data, port, isMDC);\r\n\r\n if (firstChunk) {\r\n firstChunk = false;\r\n }\r\n\r\n printProcessedTime(beginTime, 'step4');\r\n\r\n if (indexEnd >= 0) {\r\n // do not need to process the left parts, manually trigger complete\r\n const processedLines = Object.keys(time).reduce((total, curKey) => time[curKey] ? total + time[curKey].length : total, 0);\r\n if (processedLines >= FileService._getMaxRowsLimitation(maxRowsLimitation)) {\r\n abortType = Abort.maxLineNumReached;\r\n } else {\r\n abortType = Abort.maxTimeRangeReached;\r\n }\r\n\r\n if (progress) {\r\n progress(100);\r\n }\r\n parser.abort();\r\n return;\r\n } else {\r\n // the overall progress if this step is finished\r\n if (progress) {\r\n progress(Math.round(results.meta.cursor / file.size * 100));\r\n }\r\n // lastProcessedCursor = results.meta.cursor;\r\n }\r\n },\r\n complete: () => {\r\n printProcessedTime(beginTime, 'step_complete');\r\n resolve ({header: header, host: host, time: time, data: data, aborted: abortType});\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Get all ports from the name server history file\r\n * @param file the name server history file\r\n * @param progress call back for updating the progress\r\n */\r\n public getPortsFromFile(file: File, progress: any): Promise<string[]> {\r\n const beginTime = new Date();\r\n let firstChunk = true;\r\n const ports = [];\r\n const defaultPort = getDefaultPort();\r\n return new Promise((resolve, reject) => {\r\n parse(file, {\r\n chunk: (results, parser) => {\r\n // get time column\r\n if (firstChunk) {\r\n if (!validateData(results.data)) {\r\n if (progress) {\r\n progress(100);\r\n }\r\n reject(`${file.name} is empty or the format is not correct.`);\r\n parser.abort();\r\n return;\r\n }\r\n }\r\n printProcessedTime(beginTime, 'port.step1');\r\n FileService._getPorts(results.data, firstChunk, ports);\r\n if (firstChunk) {\r\n firstChunk = false;\r\n }\r\n if (progress) {\r\n progress(Math.round(results.meta.cursor / file.size * 100));\r\n }\r\n },\r\n complete: () => {\r\n // parsing done\r\n printProcessedTime(beginTime, 'step_complete');\r\n if (ports.length === 0) {\r\n ports[0] = defaultPort;\r\n }\r\n resolve (ports);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'file-drop-input',\r\n template: `\r\n <div class=\"file-drop-input\" [class.file-drop-dropping]=\"droppingFlag\" (drop)=\"onDropFiles($event)\"\r\n (dragover)=\"onDragOver($event)\" (dragleave)=\"onDragLeave($event)\">\r\n <div class=\"drop-content\">\r\n <label class=\"input-button\">\r\n <input type=\"file\" (change)=\"browseFiles($event)\" accept=\".trc\"/> {{inputAreaText}} \r\n </label>{{dropAreaText}}\r\n </div>\r\n </div>\r\n `,\r\n styleUrls: ['./file-drop-input.component.scss']\r\n})\r\n\r\nexport class FileDropInputComponent {\r\n\r\n @Input()\r\n dropAreaText = '';\r\n @Input()\r\n inputAreaText = '';\r\n @Output()\r\n public fileDrop: EventEmitter<any> = new EventEmitter<any>();\r\n @Output()\r\n public fileInput: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n droppingFlag = false;\r\n\r\n private static _stopAndPrevent(event) {\r\n event.stopPropagation(); // Stops some browsers from redirecting.\r\n event.preventDefault(); // Stops some browsers' default action, like open the file directly\r\n }\r\n\r\n public browseFiles(event: Event): void {\r\n this.fileInput.emit(event);\r\n }\r\n\r\n public onDragOver(event: Event): void {\r\n FileDropInputComponent._stopAndPrevent(event);\r\n if (!this.droppingFlag) {\r\n this.droppingFlag = true;\r\n }\r\n }\r\n\r\n public onDragLeave(event: Event): void {\r\n FileDropInputComponent._stopAndPrevent(event);\r\n if (this.droppingFlag) {\r\n this.droppingFlag = false;\r\n }\r\n }\r\n\r\n public onDropFiles(event: any) {\r\n FileDropInputComponent._stopAndPrevent(event);\r\n this.droppingFlag = false;\r\n let length = 0;\r\n if (event.dataTransfer.items) {\r\n length = event.dataTransfer.items.length;\r\n } else {\r\n length = event.dataTransfer.files.length;\r\n }\r\n\r\n if (length > 1) {\r\n event.error = 'Multiple files/folders are not supported';\r\n this.fileDrop.emit(event);\r\n return;\r\n }\r\n\r\n if (length === 1) {\r\n let fileEntry;\r\n if (event.dataTransfer.items) {\r\n if (event.dataTransfer.items[0].webkitGetAsEntry) {\r\n fileEntry = event.dataTransfer.items[0].webkitGetAsEntry();\r\n }\r\n } else {\r\n if (event.dataTransfer.files[0].webkitGetAsEntry) {\r\n fileEntry = event.dataTransfer.files[0].webkitGetAsEntry();\r\n }\r\n }\r\n if (fileEntry) {\r\n if (fileEntry.isFile) {\r\n event.error = void 0;\r\n } else if (fileEntry.isDirectory) {\r\n event.error = `Folder (${fileEntry.name}) is not supported.`;\r\n } else {\r\n event.error = `Internal error, can not get the type of the dropped item (${fileEntry.name}).`;\r\n }\r\n }\r\n\r\n const file: File = event.dataTransfer.files && event.dataTransfer.files.length > 0 ? event.dataTransfer.files[0] : null;\r\n if (file) {\r\n event.file = file;\r\n } else {\r\n event.error = 'Internal error, can not get the dropped file.';\r\n }\r\n this.fileDrop.emit(event);\r\n return;\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'instruction',\r\n templateUrl: './instruction.component.html',\r\n styleUrls: ['./instruction.component.scss'],\r\n imports: [ CommonModule ]\r\n})\r\n\r\nexport class InstructionComponent {\r\n @Input()\r\n step1Finished = false;\r\n @Input()\r\n step2Finished = false;\r\n @Input()\r\n step3Finished = false;\r\n @Input()\r\n step4Finished = false;\r\n @Input()\r\n step5Finished = false;\r\n @Input()\r\n show = true;\r\n /**\r\n * Output event bind to (show)\r\n */\r\n @Output() showChange = new EventEmitter<boolean>();\r\n onClose() {\r\n this.show = false;\r\n this.showChange.emit(this.show);\r\n }\r\n}\r\n","<div class=\"instruction\" *ngIf=\"show\">\r\n <div class=\"close\" (click)=\"onClose()\">×</div>\r\n <div class=\"mandatory\" [class.completed]=\"step1Finished\">\r\n <label>Select nameserver history file <span class=\"flag\">*</span></label> <br>\r\n <ul>\r\n <li>Click the \"Browse\" </li>\r\n <li>Drag and drop your file to \"Drop File Here\"</li>\r\n </ul>\r\n </div>\r\n <div class=\"optional\" [class.completed]=\"step2Finished\">\r\n <label>Select time range and timezone <span class=\"flag\">(optional)</span></label> <br>\r\n <ul>\r\n <li>If you do not select time range, this tool will read from the beginning until it reaches the configured maxRowsLimitation. </li>\r\n <li>If you do not select time zone, this tool will use your local default timezone.</li>\r\n </ul>\r\n </div>\r\n <div class=\"optional\" [class.completed]=\"step3Finished\">\r\n <label>Select ports <span class=\"flag\">(optional)</span></label> <br>\r\n <ul>\r\n <li>If you do not choose any port, this tool will try to load data for all ports until it reaches the configured maxRowsLimitation.</li>\r\n <li>After choosing one port, this tool will only try to load data for the selected port until it reaches the configured maxRowsLimitation.</li>\r\n <li>If you do not know any port information, you can click \"Load\" to load all ports from the nameserver history file.</li>\r\n </ul>\r\n </div>\r\n <div class=\"mandatory\" [class.completed]=\"step4Finished\">\r\n <label>Load the data from nameserver history file and show the chart <span class=\"flag\">*</span></label> <br>\r\n <ul><li>Click button \"Show\"</li></ul>\r\n </div>\r\n <div class=\"optional\" [class.completed]=\"step5Finished\">\r\n <label>Reset the chart <span class=\"flag\">(optional)</span></label> <br>\r\n <ul><li>If you zoomed in, you can go back to original status by clicking \"Reset Chart\"</li></ul>\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { Port } from '../../types';\r\n\r\n@Injectable()\r\nexport class PortSelectorService {\r\n\r\n private _defaultPorts: Port[];\r\n /**\r\n * generate the default ports from 3**01 to 3**99\r\n * the ports which used (3**01, 3**03, 3**07, 3**40, 3**43, 3*46, 3**49, 3**52, 3**55, 3*58, 3**61 ...)\r\n * by hana normally will be put in the first places\r\n */\r\n private _getDefaultPorts(): Port[] {\r\n if (this._defaultPorts) {\r\n return this._defaultPorts;\r\n }\r\n // name server, default index server and xsengine\r\n this._defaultPorts = [\r\n {id: '3**01', text: '3**01'},\r\n {id: '3**03', text: '3**03'},\r\n {id: '3**07', text: '3**07'}\r\n ];\r\n // tenant index servers\r\n for (let i = 40; i < 100; i += 3) {\r\n this._defaultPorts.push({id: `3**${i}`, text: `3**${i}`});\r\n }\r\n // others\r\n for (let i = 1; i < 100; i++) {\r\n const port = i > 9 ? `3**${i}` : `3**0${i}`;\r\n if (this._defaultPorts.findIndex(item => item.id === port) < 0) {\r\n this._defaultPorts.push({id: port, text: port});\r\n }\r\n }\r\n return this._defaultPorts;\r\n }\r\n\r\n getPorts(ports: Port[] = null): Port[] {\r\n return ports != null && ports.length > 0 ? ports : this._getDefaultPorts();\r\n }\r\n}\r\n","import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter } from '@angular/core';\r\nimport { PortSelectorService } from './port-selector.service';\r\nimport { Port } from '../../types';\r\nimport { DropdownListComponent } from 'ngx-dropdown-list';\r\n\r\n@Component({\r\n selector: 'port-selector',\r\n template: `\r\n <label style=\"width: 100%\">\r\n <ngx-dropdown-list (selectionChange)=\"onChange($event)\"\r\n [items]=\"displayPorts\"\r\n [multiSelection]=\"false\"\r\n [placeHolder]=\"'Ports'\"\r\n [(selectedValue)]=\"port\"\r\n [filterBox]=\"true\"\r\n [disabled]=\"disabled\">\r\n </ngx-dropdown-list>\r\n </label>\r\n `,\r\n providers: [ PortSelectorService ],\r\n imports: [ DropdownListComponent ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PortSelectorComponent {\r\n /**\r\n * Input: boolean (optional) bind to [disabled]\r\n */\r\n @Input() disabled = false;\r\n\r\n /**\r\n * Output event bind to (port)\r\n */\r\n @Output() portChange = new EventEmitter<string>();\r\n\r\n /**\r\n * Input: string (required) bind to [port]\r\n */\r\n @Input() port: string;\r\n\r\n /**\r\n * Input: array (required) bind to [ports]\r\n */\r\n @Input() ports: Port[];\r\n\r\n get displayPorts() {\r\n return this.service.getPorts(this.ports);\r\n }\r\n\r\n constructor(private service: PortSelectorService) {}\r\n\r\n /**\r\n * onChange function called by the \"ngx-select\" element\r\n */\r\n onChange(event: any) {\r\n this.portChange.emit(event);\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'progress-bar',\r\n styleUrls: ['./progress-bar.component.scss'],\r\n template: `\r\n <div class=\"progress-content\">\r\n <div class=\"progress\">\r\n <span class=\"bar\" [style.width]=\"progress + '%'\" [class.is-done]=\"progress == 100\"></span>\r\n </div>\r\n </div>\r\n <div class=\"progress-text-content\">\r\n <span class=\"progress-text\" [class.is-done]=\"progress === 100\">\r\n <span>{{ progress }}% </span>\r\n <span *ngIf=\"progress < 100\">Parsing...</span> <!--{{file?.name}}-->\r\n <span *ngIf=\"progress === 100\">Done</span>\r\n </span>\r\n </div>\r\n `,\r\n imports: [ CommonModule ]\r\n})\r\n\r\nexport class ProgressBarComponent {\r\n\r\n @Input()\r\n public progress: number;\r\n\r\n}\r\n","import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter } from '@angular/core';\r\nimport { OwlDateTimeModule, OwlNativeDateTimeModule } from 'nshviewer-angular-datetime-picker';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'time-range-selector',\r\n template: `\r\n <div class=\"time-range\">\r\n <div class=\"time-range-from\">\r\n <input placeholder=\"Date Time Range From:\"\r\n [disabled]=\"disabled\"\r\n [(ngModel)]=\"dateTimeRange\"\r\n [selectMode]=\"'rangeFrom'\"\r\n [owlDateTimeTrigger]=\"dtRange2\" [owlDateTime]=\"dtRange2\" #dateTime2=\"ngModel\" readonly>\r\n <owl-date-time #dtRange2 (afterPickerClosed)=\"afterPickerClosed()\"></owl-date-time>\r\n </div>\r\n <div class=\"time-range-to\">\r\n <input placeholder=\"Date Time Range To:\"\r\n [disabled]=\"disabled\"\r\n [(ngModel)]=\"dateTimeRange\"\r\n [selectMode]=\"'rangeTo'\"\r\n [owlDateTimeTrigger]=\"dtRange3\" [owlDateTime]=\"dtRange3\" #dateTime3=\"ngModel\" readonly>\r\n <owl-date-time #dtRange3 (afterPickerClosed)=\"afterPickerClosed()\"></owl-date-time>\r\n </div>\r\n </div>\r\n `,\r\n styleUrls: [ './time-range-selector.component.scss' ],\r\n standalone: true,\r\n imports: [ CommonModule, FormsModule, OwlDateTimeModule, OwlNativeDateTimeModule ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TimeRangeSelectorComponent {\r\n\r\n @Input() disabled = false;\r\n /**\r\n * selected time range\r\n */\r\n @Input() dateTimeRange: Date[];\r\n /**\r\n * for two way binding.\r\n */\r\n @Output() dateTimeRangeChange = new EventEmitter<Date[]>();\r\n\r\n /**\r\n * triggered when picker closed\r\n */\r\n afterPickerClosed() {\r\n this.dateTimeRangeChange.emit(this.dateTimeRange);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { getDefaultTimezone } from '../../utils';\r\nimport moment from 'moment-timezone';\r\n\r\n\r\nexport interface Timezone {\r\n region: string;\r\n zones: string[];\r\n}\r\n\r\n@Injectable()\r\nexport class TimezoneSelectorService {\r\n\r\n /**\r\n * get the default timezone\r\n */\r\n getDefaultTimezone(): string {\r\n return getDefaultTimezone();\r\n }\r\n\r\n /**\r\n * Get all the timezones for each region\r\n */\r\n getZones(): Timezone[] {\r\n const timezones: Timezone[] = [];\r\n const zones = moment.tz.names();\r\n zones.forEach(zone => {\r\n // get region\r\n let region;\r\n if (zone.indexOf('/') > 0) {\r\n region = zone.slice(0, zone.indexOf('/'));\r\n this._buildTimezones(timezones, region, zone);\r\n }\r\n });\r\n return timezones;\r\n }\r\n\r\n /**\r\n * build timezone lists\r\n */\r\n private _buildTimezones(timezones: Timezone[], region: string, zone: string): void {\r\n if (timezones) {\r\n let timezoneRegion = timezones.find(tz => tz.region === region);\r\n if (!timezoneRegion) {\r\n timezoneRegion = {region: region, zones: []};\r\n timezones.push(timezoneRegion);\r\n }\r\n timezoneRegion.zones.push(zone);\r\n }\r\n }\r\n}\r\n","import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { TimezoneSelectorService } from './timezone-selector.service';\r\nimport moment from 'moment-timezone';\r\nimport { DropdownListComponent } from 'ngx-dropdown-list';\r\n\r\n\r\n@Component({\r\n selector: 'timezone-selector',\r\n template: `\r\n <ngx-dropdown-list (selectionChange)=\"onChange($event)\"\r\n [items]=\"timezones\"\r\n [multiSelection]=\"false\"\r\n [placeHolder]=\"'Timezones'\"\r\n [(selectedValue)]=\"timezone\"\r\n [filterBox]=\"true\"\r\n [disabled]=\"disabled\"\r\n [allowClear]=\"false\">\r\n </ngx-dropdown-list>\r\n `,\r\n providers: [ TimezoneSelectorService ],\r\n imports: [ DropdownListComponent ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TimezoneSelectorComponent implements OnChanges {\r\n\r\n @Input() disabled = false;\r\n @Input() timezone: string;\r\n @Output() timezoneChange = new EventEmitter<string>();\r\n\r\n /**\r\n * all time zones for each region\r\n */\r\n timezones: any[];\r\n\r\n private static _formatNumber(number): string {\r\n return number < 10 || !number ? `0${number}` : `${number}`;\r\n }\r\n\r\n constructor(private service: TimezoneSelectorService) {\r\n const defaultTZ = this.service.getDefaultTimezone();\r\n this.timezones = this.service.getZones().map(tz => ({group: tz.region, items: tz.zones.map(zone =>\r\n ({id: zone, value: zone, text: this._getFormattedZone(tz.region, zone), selected: zone === defaultTZ}))}));\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['timezone'] && changes['timezone'].currentValue) {\r\n if (this.timezones) {\r\n this.timezones = this.service.getZones().map(tz => ({group: tz.region, items: tz.zones.map(zone =>\r\n ({id: zone, value: zone, text: this._getFormattedZone(tz.region, zone), selected: zone === changes['timezone'].currentValue}))}));\r\n }\r\n }\r\n }\r\n\r\n private _getFormattedZone(region, zone) {\r\n return `${region} - ${this._formatTimezone(zone)} ${this._getOffset(zone)}`;\r\n }\r\n\r\n private _formatTimezone(zone: string): string {\r\n const tz = zone.split('/');\r\n return tz[tz.length - 1].replace('_', ' ');\r\n }\r\n\r\n private _getOffset(zone: string): string {\r\n let offset = moment.tz(zone).utcOffset();\r\n const neg = offset < 0;\r\n if (neg) {\r\n offset = -1 * offset;\r\n }\r\n const hours = Math.floor(offset / 60);\r\n const minutes = (offset / 60 - hours) * 60;\r\n return `(GMT${neg ? '-' : '+'}${TimezoneSelectorComponent._formatNumber(hours)}:${TimezoneSelectorComponent._formatNumber(minutes)})`;\r\n }\r\n\r\n /**\r\n * onChange function called by the \"ngx-select\" element\r\n * @param selectedTimezone The timezone string selected\r\n */\r\n onChange(selectedTimezone: string) {\r\n this.timezone = selectedTimezone;\r\n this.timezoneChange.emit(this.timezone);\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'alert',\r\n templateUrl: './alert.component.html',\r\n styleUrls: ['./alert.component.scss'],\r\n standalone: true,\r\n imports: [CommonModule]\r\n})\r\n\r\nexport class AlertComponent implements OnChanges {\r\n @Input() alertMessage: string;\r\n @Input() alertType: string;\r\n @Input() alertTimeout: number;\r\n @Output() alertMessageChange = new EventEmitter<string>();\r\n\r\n message: string;\r\n private _timeout: any;\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['alertMessage']) {\r\n this._setMessage(changes['alertMessage'].currentValue);\r\n }\r\n }\r\n\r\n private _setMessage(msgString: string) {\r\n this.message = void 0;\r\n if (msgString && msgString.length > 0) {\r\n this._showMessage(msgString);\r\n this._setTimeout();\r\n }\r\n }\r\n\r\n private _showMessage(msgString: string) {\r\n setTimeout(() => this.message = msgString, 100);\r\n }\r\n\r\n private _setTimeout() {\r\n if (this.alertTimeout > 0) {\r\n // clear time out first, it doesn't matter whether the _timeout is undefined or not.\r\n clearTimeout(this._timeout);\r\n this._timeout = setTimeout(() => this.clearAlert(), this.alertTimeout);\r\n }\r\n }\r\n\r\n clearAlert() {\r\n this.alertMessage = void 0;\r\n this.alertType = void 0;\r\n this.alertMessageChange.emit(this.alertMessage);\r\n clearTimeout(this._timeout);\r\n }\r\n\r\n /**\r\n * get css class base on the alert type\r\n */\r\n get alertClassType(): string {\r\n if (this.alertType) {\r\n switch (this.alertType.toLowerCase()) {\r\n case 'success':\r\n return 'alert-success';\r\n case 'error':\r\n return 'alert-error';\r\n case 'info':\r\n return 'alert-info';\r\n case 'warning':\r\n return 'alert-warning';\r\n default:\r\n return '';\r\n }\r\n }\r\n return '';\r\n }\r\n}\r\n","<div class=\"alert-container\" *ngIf=\"message\">\r\n <div [ngClass]=\"alertClassType\">\r\n {{message}}\r\n <a class=\"close\" (click)=\"clearAlert()\">×</a>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n","import {AfterViewInit, Component, ElementRef, Input, OnChanges, SimpleChanges, ViewChild} from '@angular/core';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport {\r\n setChartHeight,\r\n sleep,\r\n isEmptyData,\r\n getDisplayPort,\r\n getFileFromInput,\r\n isSameFile,\r\n getAbbreviatedFileName,\r\n getFileFromDrop,\r\n getRealPorts,\r\n getTimeString,\r\n printProcessedTime,\r\n getTimeRangeString,\r\n generatePorts,\r\n getDefaultTimezone,\r\n blobToFile,\r\n isFile,\r\n} from '../utils';\r\nimport { Abort, Alert, HtmlElement, Item, ChartContentData, ChartContentHeader, ChartContentTime, Port } from '../types';\r\nimport { FileService, ChartService, UIService } from '../services';\r\n\r\nimport 'hammerjs';\r\nimport { OwlDateTimeModule, OwlNativeDateTimeModule } from 'nshviewer-angular-datetime-picker';\r\nimport { SelectionTableComponent } from 'ngx-selection-table';\r\nimport { FileDropInputComponent } from './file-drop-input';\r\nimport { InstructionComponent } from './instruction';\r\nimport { PortSelectorComponent } from './port-selector';\r\nimport { ProgressBarComponent } from './progress-bar';\r\nimport { TimeRangeSelectorComponent } from './time-range-selector';\r\nimport { TimezoneSelectorComponent } from './timezone-selector';\r\nimport { AlertComponent } from './alert';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nenum SearchType {\r\n searchWithSubHeader = 'searchWithSubHeader',\r\n searchAll = 'searchAll',\r\n searchInChildren = 'searchInChildren'\r\n}\r\n\r\n@Component({\r\n selector: 'ngx-hana-nameserver-history-viewer',\r\n templateUrl: './nameserver-history.component.html',\r\n styleUrls: [ './nameserver-history.component.scss' ],\r\n providers: [ FileService, ChartService, UIService ],\r\n standalone: true,\r\n imports: [ CommonModule, AlertComponent, TimezoneSelectorComponent, TimeRangeSelectorComponent, ProgressBarComponent, PortSelectorComponent, InstructionComponent, FileDropInputComponent, SelectionTableComponent, OwlDateTimeModule, OwlNativeDateTimeModule ]\r\n})\r\nexport class NameServerHistoryComponent implements OnChanges, AfterViewInit {\r\n @ViewChild('nameserverHistoryAll', { read: ElementRef }) nameserverHistoryAllRef: ElementRef;\r\n @ViewChild('nameserverHistoryContent', { read: ElementRef }) nameserverHistoryContentRef: ElementRef;\r\n\r\n /**\r\n * Input (optional) bind to [defaultSelectedItems]\r\n */\r\n @Input() defaultSelectedItems: string[];\r\n\r\n /**\r\n * Input (optional) bind to [hideMeasureColumns]\r\n */\r\n @Input() hideMeasureColumns: string[];\r\n\r\n /**\r\n * Input (optional) bind to [maxRowsLimitation]\r\n */\r\n @Input() maxRowsLimitation: number;\r\n\r\n /**\r\n * Input (optional) bind to [showInstruction]\r\n */\r\n @Input() showInstruction = true;\r\n\r\n /**\r\n * Input (optional) bind to [timezone]\r\n */\r\n @Input() timezone: string;\r\n\r\n /**\r\n * file buffer, use this for stream mode\r\n */\r\n @Input() fileBuffer: Blob;\r\n\r\n /**\r\n * file name for stream mode\r\n */\r\n @Input() streamModeFileName: string;\r\n\r\n /**\r\n * auto display the chart in stream mode\r\n */\r\n @Input() autoDisplay: boolean;\r\n\r\n /**\r\n * selected name server history file\r\n */\r\n file: File;\r\n\r\n /**\r\n * time info of the name server history file\r\n */\r\n time: ChartContentTime = {};\r\n\r\n /**\r\n * data of the name server history file\r\n */\r\n data: ChartContentData = {};\r\n\r\n /**\r\n * header of the name server history file\r\n */\r\n header: ChartContentHeader[] = [];\r\n\r\n /**\r\n * host of the name server history file\r\n */\r\n host = 'nameserver history file';\r\n\r\n /**\r\n * alert message content\r\n */\r\n alertMessage: string;\r\n\r\n /**\r\n * alert message type\r\n */\r\n alertType: Alert;\r\n\r\n /**\r\n * selected port\r\n */\r\n port: string;\r\n\r\n /**\r\n * all the ports from the nameserver history file\r\n */\r\n ports: Port[];\r\n\r\n /**\r\n * selected time range\r\n */\r\n dateTimeRange: Date[];\r\n\r\n /**\r\n * data source for the selection table (right part of the chart)\r\n */\r\n tableSource: any[];\r\n\r\n /**\r\n * the progress for reading file\r\n */\r\n readProgress = 0;\r\n\r\n /**\r\n * selected/dropped file name (abbreviation), full file name will be shown via the tooltips\r\n */\r\n abbreviatedFileName = 'or Drop File Here';\r\n\r\n /**\r\n * for the instruction step 4\r\n */\r\n stepShowChart = false;\r\n\r\n /**\r\n * control flag for showing the name server history chart\r\n */\r\n showChartFlag: boolean;\r\n\r\n /**\r\n * control flag for showing the file reading progress\r\n */\r\n showReadFileProgress: boolean;\r\n\r\n /**\r\n * control flag for \"Load\" ports button\r\n */\r\n enableLoadPortsButton: boolean;\r\n\r\n /**\r\n * control flag for enabling \"Show\" chart button\r\n */\r\n enableShowChartButton: boolean;\r\n\r\n /**\r\n * control flag for \"Reset\" chart button\r\n */\r\n enableResetChartButton: boolean;\r\n\r\n searchType = SearchType.searchAll;\r\n\r\n /**\r\n * selection information for the selection table\r\n */\r\n private _selection: SelectionModel<any>;\r\n\r\n /**\r\n * current displaying port\r\n */\r\n private _currentChartPort: string;\r\n\r\n constructor(private fileService: FileService,\r\n private chartService: ChartService,\r\n private uiService: UIService) {}\r\n\r\n async ngOnChanges(changes: SimpleChanges) {\r\n const fbc = changes['fileBuffer'];\r\n // !isFile(fbc.currentValue) --> only show chart when it's not a file -> it's a file, means the object has already been processed\r\n if (fbc && fbc.currentValue && fbc.currentValue !== fbc.previousValue && !isFile(fbc.currentValue)) {\r\n // simulate selecting file\r\n const simulatedEvent = {target: {files: [blobToFile(fbc.currentValue, this.streamModeFileName)]}};\r\n await this.fileSelected(simulatedEvent);\r\n this.port = undefined; // clear the port selection\r\n if (this.autoDisplay) {\r\n this.onResize(); // ngAfterViewInit/resize won't work in electron\r\n this.showChart();\r\n }\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n // init items' status\r\n // reset chart button will be disable by default later, only be enabled after zoomed\r\n this._toggleItems([\r\n {id: HtmlElement.chartArea, status: false},\r\n {id: HtmlElement.readFileProgress, status: false},\r\n {id: HtmlElement.showChartButton, status: false},\r\n {id: HtmlElement.loadPortsButton, status: true},\r\n {id: HtmlElement.resetChartButton, status: false}]);\r\n this.onResize(); // update the size, otherwise there may have a scrollbar (because of the toast) if auto display is set to true\r\n }\r\n\r\n /**\r\n * Reset Chart to initial status\r\n * If legend is already selected/unselected from the list, it wouldn't be restored.\r\n */\r\n resetChart(): void {\r\n this._toggleItems([{id: HtmlElement.resetChartButton, status: false}]);\r\n\r\n if (this.tableSource && this._selection) {\r\n this.chartService.resetChart(this.tableSource, this._selection)\r\n .catch(e => this._showMessage(Alert.error, e));\r\n }\r\n }\r\n\r\n /**\r\n * read the file and display the chart\r\n */\r\n showChart(): void {\r\n // after click, this button and reset button needs to be disabled\r\n this._toggleItems([\r\n {id: HtmlElement.resetChartButton, status: false},\r\n {id: HtmlElement.showChartButton, status: false}]);\r\n\r\n this.stepShowChart = true;\r\n\r\n this._initChartEnv().then(() => {\r\n const selectedTime = this._selectedTimeRange;\r\n if (selectedTime.startTime > selectedTime.endTime) {\r\n this._showMessage(Alert.error, 'Time range is not correct.');\r\n return Promise.resolve();\r\n }\r\n if (this.file) {\r\n // it's time for displaying the reading progress bar\r\n this._toggleItems([{id: HtmlElement.readFileProgress, status: true}]);\r\n return this._buildChartFromDataFile(this.file, selectedTime.startTime, selectedTime.endTime, this.port);\r\n }\r\n return Promise.resolve();\r\n }).catch(e => {\r\n this._showMessage(Alert.error, e);\r\n this._toggleItems([{id: HtmlElement.readFileProgress, status: false}]);\r\n });\r\n }\r\n\r\n /**\r\n * load all ports from file\r\n */\r\n loadPorts(): void {\r\n // do confirmation actions\r\n if (this.file) {\r\n // before start loading ports from file, display progress bar and disable the show chart button\r\n this._toggleItems([\r\n {id: HtmlElement.readFileProgress, status: true},\r\n {id: HtmlElement.showChartButton, status: false}\r\n ]);\r\n this._readPortsFromFile(this.file);\r\n }\r\n }\r\n\r\n /**\r\n * select name server history file, currently only supports 1 file.\r\n */\r\n async fileSelected(event: any) {\r\n const selectedFile = getFileFromInput(event.target);\r\n if (selectedFile) {\r\n if (!isSameFile(this.file, selectedFile)) {\r\n // init port selector\r\n await this._initPortSelector().catch(e => this._showMessage(Alert.error, e));\r\n\r\n this.file = selectedFile;\r\n this.abbreviatedFileName = getAbbreviatedFileName(this.file.name);\r\n // after file has been selected, the show chart button needs to be enabled\r\n this._toggleItems([{id: HtmlElement.showChartButton, status: true}]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * drop name server history file, currently only supports 1 file.\r\n */\r\n fileDropped(event: any) {\r\n getFileFromDrop(event)\r\n .then(file => {\r\n if (!isSameFile(this.file, file)) {\r\n // init port selector\r\n this.file = file;\r\n if (this.file) {\r\n this.abbreviatedFileName = getAbbreviatedFileName(this.file.name);\r\n // after file has been dropped, the show chart button needs to be enabled\r\n this._toggleItems([{id: HtmlElement.showChartButton, status: true}]);\r\n }\r\n }})\r\n .then(() => {\r\n return this._initPortSelector();\r\n })\r\n .catch(e => this._showMessage(Alert.error, e));\r\n }\r\n\r\n /**\r\n * Select one item from selection table, relative dataset will be shown or hidden\r\n */\r\n selectItem(event: any) {\r\n if (event && event.tableRow) {\r\n const row = event.tableRow;\r\n this._selection.toggle(row);\r\n this.chartService.toggleDataInChart(row.KPI, !this._selection.isSelected(row))\r\n .catch(e => this._showMessage(Alert.error, e));\r\n }\r\n }\r\n\r\n /**\r\n * recalculating chart height when resizing\r\n */\r\n onResize() {\r\n const nameserverHistoryAllElement = this.nameserverHistoryAllRef ? this.nameserverHistoryAllRef.nativeElement : null;\r\n const nameserverHistoryContentElement = this.nameserverHistoryContentRef ? this.nameserverHistoryContentRef.nativeElement : null;\r\n setChartHeight(nameserverHistoryAllElement, nameserverHistoryContentElement);\r\n }\r\n\r\n /**\r\n * Switch port and reinitialize chart, triggered by changing the port\r\n * @param port the selected port\r\n */\r\n switchPortForChart(port: string): void {\r\n if (port === this._currentChartPort) {\r\n // not to switch port, because the relative port is displaying, no need to render twice.\r\n return;\r\n }\r\n if (!this.file || !port || port.length === 0 || port.slice(1, 3) === '**') {\r\n return;\r\n } else if (Object.keys(this.time).length > 1 && !getRealPorts(Object.keys(this.time).filter(key => this.time[key])).includes(port)) {\r\n this._showMessage(Alert.info, `Data of port:${port} is not loaded, please load the data first by clicking the \"Show\" button.`);\r\n return;\r\n }\r\n\r\n // only do switch ports when available ports number > 1\r\n if (Object.keys(this.time).filter(key => this.time[key]).length > 1) {\r\n // disable the \"show chart\" and \"reset chart\" button first\r\n this._toggleItems([\r\n {id: HtmlElement.showChartButton, status: false},\r\n {id: HtmlElement.resetChartButton, status: false}]);\r\n // init the environment with switch flag\r\n this._initChartEnv(true).then(() => {\r\n return this._buildChart(port, null, true);\r\n }).catch(e => this._showMessage(Alert.error, e));\r\n }\r\n }\r\n\r\n /**\r\n * get the columns which need to be hidden from the selection table\r\n */\r\n get hiddenColumns(): string[] {\r\n return this.uiService.getHiddenColumns(this.hideMeasureColumns);\r\n }\r\n\r\n /**\r\n * get default timezone\r\n */\r\n get defaultTimezone(): string {\r\n return getDefaultTimezone();\r\n }\r\n\r\n /**\r\n * get the key column (KPI)\r\n */\r\n get kpiColumn(): Item {\r\n return Item.kpi;\r\n }\r\n\r\n /**\r\n * get the key column (KPI)\r\n */\r\n get descColumn(): Item {\r\n return Item.description;\r\n }\r\n\r\n /**\r\n * get the selected time range, set second and millisecond part to 0\r\n */\r\n private get _selectedTimeRange(): {startTime: number, endTime: number} {\r\n let startTime = 0;\r\n let endTime = 4102358400000; // 2099/12/31\r\n if (this.dateTimeRange != null) {\r\n if (this.dateTimeRange.length >= 1) {\r\n // get start time\r\n if (this.dateTimeRange[0]) {\r\n startTime = this.dateTimeRange[0].setSeconds(0, 0);\r\n }\r\n if (this.dateTimeRange[1]) {\r\n endTime = this.dateTimeRange[1].setSeconds(0, 0);\r\n }\r\n }\r\n }\r\n return {startTime: startTime, endTime: endTime};\r\n }\r\n\r\n /**\r\n * get the time range string, eg: 2018-10-25 10:25 ~ 2018-10-26 10:26\r\n */\r\n private get _selectedTimeRangeString(): string {\r\n const selectedTimeRangeString = this._selectedTimeRange;\r\n return `${getTimeString(selectedTimeRangeString.startTime)} ~ ${getTimeString(selectedTimeRangeString.endTime)}`;\r\n }\r\n\r\n /**\r\n * get array of header key\r\n */\r\n private get _headerKey(): string[] {\r\n if (this.header) {\r\n return this.header.map(headerItem => headerItem.key);\r\n }\r\n return [];\r\n }\r\n\r\n /**\r\n * get array of header text\r\n */\r\n private get _headerText(): string[] {\r\n return this.header.map(headerItem => headerItem.text);\r\n }\r\n\r\n /**\r\n * read ports from the selected nameserver history file\r\n * @param file nameserver history file\r\n */\r\n private _readPortsFromFile(file: File): void {\r\n this.fileService.getPortsFromFile(file, (progress) => {\r\n this.readProgress = progress;\r\n }).then(ports => {\r\n return sleep(100).then(() => {\r\n return this._initPortSelector(ports);\r\n });\r\n }).catch(e => this._showMessage(Alert.error, e));\r\n }\r\n\r\n /**\r\n * build chart from the selected nameserver history file\r\n * @param file the nameserver history file\r\n * @param startTime start time\r\n * @param endTime end time\r\n * @param selectedPort selected port for nameserver history file (MDC system)\r\n */\r\n private _buildChartFromDataFile(file: File, startTime: number, endTime: number, selectedPort: string): Promise<any> {\r\n return this.fileService.getChartContentFromFile(\r\n file,\r\n startTime,\r\n endTime,\r\n selectedPort,\r\n this.timezone,\r\n this.maxRowsLimitation, progress => this.readProgress = progress)\r\n .then(result => {\r\n // parsing done\r\n const beginTime = new Date();\r\n const promises = [];\r\n const ports = getRealPorts(Object.keys(result.time), true);\r\n ports.forEach(port => {\r\n // convert the unit and generate controlling data for all ports\r\n promises.push(this.uiService.convertUnitAndGenerateControlData(result.data[port], result.header, port));\r\n });\r\n\r\n return Promise.all(promises)\r\n .then(() => {\r\n\r\n // get all ports from the analyzed data(time)\r\n // get the port that will be shown in the page\r\n const port = getDisplayPort(ports, selectedPort);\r\n\r\n printProcessedTime(beginTime, 'converting step');\r\n ports.forEach( portItem => this.uiService.generateYScale(portItem));\r\n printProcessedTime(beginTime, 'generating YScale step');\r\n this.data = result.data;\r\n this.time = result.time;\r\n this.header = this.uiService.getHeader(result.header, port);\r\n this.host = result.host;\r\n if (result.aborted === Abort.maxLineNumReached) {\r\n this._showMessage(\r\n Alert.warning, `Maximum number of lines reached. Processed time range is: ${getTimeRangeString(this.time)}.`);\r\n } else {\r\n if (isEmptyData(this.data)) {\r\n this._showMessage(Alert.info, `Cannot find any data for the selected time period: ${this._selectedTimeRangeString}`);\r\n } else {\r\n this._showMessage(Alert.success, `Processed time range is: ${getTimeRangeString(this.time)}.`);\r\n }\r\n }\r\n return sleep(100).then(() => {\r\n return this._buildChart(port, ports);\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * reinitialize the port selector with the ports\r\n */\r\n private _initPortSelector(ports: string[] = null, selectedPort: string = null): Promise<void> {\r\n return new Promise(resolve => {\r\n // initialization for ngx-select\r\n if (ports != null && ports.length > 1) {\r\n // MDC, remove default '0000' port\r\n this.ports = generatePorts(getRealPorts(ports), selectedPort);\r\n } else {\r\n this.ports = generatePorts(ports);\r\n }\r\n\r\n if (ports != null && selectedPort === null) {\r\n // reset status when doing:\r\n // 1. loading ports\r\n // 2. the file doesn't contain the selected Port\r\n this.readProgress = 0;\r\n // hide the progress bar and enable the \"show chart\" button\r\n this._toggleItems([\r\n {id: HtmlElement.readFileProgress, status: false},\r\n {id: HtmlElement.showChartButton, status: true}\r\n ]);\r\n }\r\n resolve();\r\n });\r\n }\r\n\r\n /**\r\n * build and display the chart on page\r\n * @param port the selected port\r\n * @param ports all available ports\r\n * @param switchFlag indicates whether this function is triggered from switching ports (no init port selector needed)\r\n */\r\n private _buildChart(port: string, ports: string[], switchFlag = false): Promise<any> {\r\n const beginTime = new Date();\r\n if (port) {\r\n return Promise.resolve(this._loadSettingsForSelectionsTable(port))\r\n .then( () => {\r\n // get the config\r\n return this.chartService.buildChart(\r\n this.time[port],\r\n this.data[port],\r\n this.uiService.getYScale(this._headerKey, port),\r\n this._headerText,\r\n this._headerKey,\r\n this._selection,\r\n this.tableSource,\r\n this._getHostTitle(port),\r\n this.uiService.getDisplayItems(this._headerKey, port, this.defaultSelectedItems),\r\n this._onZoom.bind(this))\r\n .then(() => {\r\n this.readProgress = 0;\r\n // after chart has been created, show the chart area, hide progress bar and enable the \"show chart\" button\r\n this._toggleItems([\r\n {id: HtmlElement.chartArea, status: true},\r\n {id: HtmlElement.readFileProgress, status: false},\r\n {id: HtmlElement.showChartButton, status: true}\r\n ]);\r\n // set port to current displaying port\r\n this._currentChartPort = port;\r\n printProcessedTime(beginTime, 'step_build_chart');\r\n if (ports && ports.length > 0) {\r\n if (!switchFlag) {\r\n // initialize port selector. Do not need to do it when switching port.\r\n return this._initPortSelector(ports, port);\r\n }\r\n }\r\n return Promise.resolve();\r\n });\r\n });\r\n } else {\r\n if (ports && ports.length > 0) {\r\n this._showMessage(\r\n Alert.warning,\r\n 'The selected port does not exist in the name server history file. Please choose a correct port and have a try again.');\r\n if (!switchFlag) {\r\n // initialize port selector. Do not need to do it when switching port.\r\n return this._initPortSelector(ports, port);\r\n }\r\n }\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * get the string that will be displayed on the title area of the chart\r\n * eg: host1 - 30040 (2018-09-05 15:32:32 ~ 2018-09-07 15:32:15)\r\n * @param port selected port\r\n */\r\n private _getHostTitle(port: string): string {\r\n if (this.host) {\r\n return `${this.host} - ${port} ( ${getTimeRangeString(this.time[port])} )`;\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * after zoom, enable the reset button.\r\n */\r\n private _onZoom(): void {\r\n this._toggleItems([{id: HtmlElement.resetChartButton, status: true}]);\r\n }\r\n\r\n /**\r\n * initialize chart, including: destroy current chart, initialize config, initialize all relative data\r\n */\r\n private _initChartEnv(switchFlag: boolean = false): Promise<any> {\r\n return this.chartService.destroyChart().then(() => {\r\n {\r\n // cleanup other data\r\n this._toggleItems([{id: HtmlElement.chartArea, status: false}]);\r\n\r\n if (!switchFlag) {\r\n Object.keys(this.time).forEach(key => {\r\n if (this.time[key]) {\r\n this.time[key].length = 0;\r\n }});\r\n this.time = {};\r\n Object.keys(this.data).forEach(key => {\r\n if (this.data[key]) {\r\n this.data[key].length = 0;\r\n }});\r\n this.data = {};\r\n this.header.length = 0;\r\n this.host = 'nameserver history file';\r\n this.tableSource = void 0;\r\n this.readProgress = 0;\r\n this.uiService.clearLoadHistoryInfos();\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Load settings for the selection table (the right part of the chart)\r\n * @param port the selected port\r\n */\r\n private _loadSettingsForSelectionsTable(port: string): void {\r\n this.tableSource = this.uiService.getSelectionTableRows(this._headerKey, port, this.defaultSelectedItems);\r\n this._selection = new SelectionModel(true, []);\r\n this.tableSource.forEach(row => {\r\n if (this.uiService.getDisplayItems(this._headerKey, port, this.defaultSelectedItems).includes(row.KPI)) {\r\n this._selection.select(row);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show messages\r\n * @param type type of the message\r\n * @param message message text\r\n */\r\n private _showMessage(type: Alert, message: string): void {\r\n if (type) {\r\n switch (type) {\r\n case Alert.success:\r\n case Alert.info:\r\n break;\r\n case Alert.warning:\r\n console.warn(message);\r\n break;\r\n case Alert.error:\r\n console.error(message);\r\n }\r\n }\r\n if (this.alertMessage === message) {\r\n // try trigger the change event of the alert.\r\n this.alertMessage = void 0;\r\n setTimeout(() => this.alertMessage = message, 100);\r\n } else {\r\n this.alertMessage = message;\r\n }\r\n this.alertType = type;\r\n }\r\n\r\n /**\r\n * toggle items with the provided status (show or hide the relative element on the page)\r\n * @param items items with the relative id and status.\r\n */\r\n private _toggleItems(items: {id: HtmlElement, status: boolean}[]) {\r\n const getVariableNameByTypeId = (id: HtmlElement) => {\r\n switch (id) {\r\n case HtmlElement.chartArea: return 'showChartFlag';\r\n case HtmlElement.readFileProgress: return 'showReadFileProgress';\r\n case HtmlElement.showChartButton: return 'enableShowChartButton';\r\n case HtmlElement.loadPortsButton: return 'enableLoadPortsButton';\r\n case HtmlElement.resetChartButton: return 'enableResetChartButton';\r\n }\r\n };\r\n if (items) {\r\n items.forEach(item => {\r\n this[getVariableNameByTypeId(item.id)] = item.status;\r\n });\r\n }\r\n }\r\n}\r\n","<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\" class=\"box-stream-mode-text\">{{streamModeFileName || 'nameserver_history.trc (stream mode)'}}</p>\r\n </div>\r\n <div *ngIf=\"showReadFileProgress\">\r\n <progress-bar [progress]=\"readProgress\"></progress-bar>\r\n </div>\r\n </div>\r\n <div class=\"input-time\">\r\n <div class=\"input-time-range\">\r\n <time-range-selector [disabled]=\"showReadFileProgress\" [(dateTimeRange)]=\"dateTimeRange\"></time-range-selector>\r\n </div>\r\n <div class=\"timezone-selector\">\r\n <timezone-selector [(timezone)]=\"timezone\" [disabled]=\"showReadFileProgress\"></timezone-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"port-selection\">\r\n <div class=\"port-selector\">\r\n <port-selector (portChange)=\"switchPortForChart($event)\" [(port)]=\"port\" [ports]=\"ports\" [disabled]=\"showReadFileProgress\"></port-selector>\r\n </div>\r\n <div class=\"port-load-button\">\r\n <button (click)=\"loadPorts()\" title=\"Load all ports from name server history trace file.\" [disabled]=\"!enableShowChartButton || port || !enableLoadPortsButton\">{{showReadFileProgress? \"Loading...\" : \"Load\"}}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chart-operation\">\r\n <div class=\"left\">\r\n <button (click)=\"showChart()\" title=\"Load and display all data from name server history trace file.\" [disabled]=\"!enableShowChartButton\">{{showReadFileProgress? \"Loading...\" : \"Show\"}}</button>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"resetChart()\" title=\"Reset zoom of chart.\" [disabled]=\"showReadFileProgress || !enableResetChartButton\">Reset Chart</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div #nameserverHistoryContent class=\"nameserver-history-content\">\r\n <div class=\"nameserver-history-content-chart\">\r\n <instruction [(show)]=\"showInstruction\" *ngIf=\"!showChartFlag && showInstruction\"\r\n [step1Finished]=\"!!file\"\r\n [step2Finished]=\"dateTimeRange && (!!dateTimeRange[0] || !!dateTimeRange[1]) || timezone != defaultTimezone\"\r\n [step3Finished]=\"!!port\"\r\n [step4Finished]=\"stepShowChart && !enableShowChartButton\"\r\n [step5Finished]=\"false\">\r\n </instruction>\r\n <canvas id=\"chartNameServerHistory\" ></canvas>\r\n </div>\r\n <div class=\"nameserver-history-content-controller\" >\r\n <ngx-selection-table (change)=\"selectItem($event)\" *ngIf=\"showChartFlag\"\r\n [filter]=\"true\"\r\n [checkbox]=\"true\"\r\n [tableSource]=\"tableSource\"\r\n [keyColumn]=\"kpiColumn\"\r\n [hiddenColumns]=\"hiddenColumns\"\r\n [tooltipColumn]=\"descColumn\"\r\n [searchStyle]=\"searchType\"\r\n [searchColumn]=\"kpiColumn\"\r\n [multiSelection]=\"true\">\r\n </ngx-selection-table>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"message-container\" *ngIf=\"alertMessage\">\r\n <alert [(alertMessage)]=\"alertMessage\" [alertType]=\"alertType\" [alertTimeout]=\"30000\"></alert>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PortSelectorService","i1","i1.TimezoneSelectorService","i1.FileService","i1.ChartService","i1.UIService","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-hana-nameserver-history-viewer.mjs","sources":["../../src/nameserver-history-viewer/utils/chart-util.ts","../../src/nameserver-history-viewer/types/item.types.ts","../../src/nameserver-history-viewer/types/scale-group.types.ts","../../src/nameserver-history-viewer/types/unit.types.ts","../../src/nameserver-history-viewer/types/unit-category.types.ts","../../src/nameserver-history-viewer/types/alert.types.ts","../../src/nameserver-history-viewer/types/html-element.type.ts","../../src/nameserver-history-viewer/types/abort.types.ts","../../src/nameserver-history-viewer/utils/ui-util.ts","../../src/nameserver-history-viewer/utils/time-util.ts","../../src/nameserver-history-viewer/utils/file-util.ts","../../src/nameserver-history-viewer/services/ui.service.ts","../../src/nameserver-history-viewer/services/chart.service.ts","../../src/nameserver-history-viewer/services/file.service.ts","../../src/nameserver-history-viewer/components/file-drop-input/file-drop-input.component.ts","../../src/nameserver-history-viewer/components/instruction/instruction.component.ts","../../src/nameserver-history-viewer/components/instruction/instruction.component.html","../../src/nameserver-history-viewer/components/port-selector/port-selector.service.ts","../../src/nameserver-history-viewer/components/port-selector/port-selector.component.ts","../../src/nameserver-history-viewer/components/progress-bar/progress-bar.component.ts","../../src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.ts","../../src/nameserver-history-viewer/components/timezone-selector/timezone-selector.service.ts","../../src/nameserver-history-viewer/components/timezone-selector/timezone-selector.component.ts","../../src/nameserver-history-viewer/components/alert/alert.component.ts","../../src/nameserver-history-viewer/components/alert/alert.component.html","../../src/nameserver-history-viewer/components/nameserver-history.component.ts","../../src/nameserver-history-viewer/components/nameserver-history.component.html","../../ngx-hana-nameserver-history-viewer.ts"],"sourcesContent":["import { ColorRgba } from '../types';\r\n\r\n\r\nfunction _randomColorFactor(): number {\r\n return Math.round(Math.random() * 255);\r\n}\r\n\r\n/**\r\n * generate random color\r\n * @param opacity alpha\r\n */\r\nexport function randomColor(opacity: number): string {\r\n return 'rgba(' + _randomColorFactor() + ',' + _randomColorFactor() + ',' + _randomColorFactor() + ',' + (opacity || '.3') + ')';\r\n}\r\n\r\n/**\r\n * generate the rgba string from ColorRgba\r\n */\r\nexport function getColorString(rgbaColor: ColorRgba): string {\r\n return `rgba(${rgbaColor['red']}, ${rgbaColor['green']}, ${rgbaColor['blue']}, ${rgbaColor['alpha']})`;\r\n}\r\n\r\n/**\r\n * format Number with commas\r\n */\r\nexport function getNumberWithCommas(num: number): string {\r\n const [integerPart, decimalPart] = num.toString().split('.');\r\n const integerWithCommas = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n return decimalPart ? `${integerWithCommas}.${decimalPart}` : integerWithCommas;\r\n}\r\n","export enum Item {\r\n kpi = 'KPI',\r\n yScale = 'Y-Scale',\r\n yScaleGroup = '_YScaleGroup',\r\n unit = 'Unit',\r\n max = 'Max',\r\n average = 'Average',\r\n sum = 'Sum',\r\n last = 'Last',\r\n description = 'Description',\r\n header = 'header'\r\n}\r\n","export enum ScaleGroup {\r\n CPU,\r\n Memory,\r\n Disk,\r\n Network,\r\n Swap,\r\n Time,\r\n Req,\r\n Stmt,\r\n WRTime,\r\n WRSize,\r\n Conn,\r\n Trans,\r\n Unknown\r\n}\r\n","export enum Unit {\r\n PCT = '%',\r\n MS = 'ms',\r\n Empty = '',\r\n GB = 'GB',\r\n MB = 'MB',\r\n MBPerSec = 'MB/s',\r\n SecPerSec = 'Sec/s',\r\n StmtPerSec = 'stm/s',\r\n ReqPerSec = 'req/s',\r\n ColPerSec = 'col/s'\r\n}\r\n","export enum UnitType {\r\n TypeEA,\r\n TypeGB,\r\n TypeMB,\r\n TypeSecSec,\r\n TypeMBSec,\r\n TypeSec\r\n}\r\n","export enum Alert {\r\n success = 'success',\r\n error = 'error',\r\n info = 'info',\r\n warning = 'warning',\r\n}\r\n","export enum HtmlElement {\r\n chartArea,\r\n readFileProgress,\r\n showChartButton,\r\n loadPortsButton,\r\n resetChartButton\r\n}\r\n","export enum Abort {\r\n maxLineNumReached,\r\n maxTimeRangeReached,\r\n}\r\n","import { getRealPorts } from './file-util';\r\nimport {UnitType, Port, ChartContentData} from '../types';\r\n\r\n/**\r\n * For some reason, hana studio will abandon the last line of nameserver history trace file\r\n */\r\nconst _IGNORED_LINE_FROM_TAIL = 1;\r\n\r\n/**\r\n * None index server ports in name server history,\r\n * 01: name server; 02: preprocessor; 04: script server; 05: statistics server / diserver;\r\n * 06: web dispatcher; 07: xsengine; 10 compileserver; 11 dpserver; 12 esserver; 29 xscontroller\r\n */\r\nconst _NON_INDEX_SERVER_PORTS = ['01', '02', '04', '05', '06', '07', '10', '11', '12', '29'];\r\n\r\nconst _HANA_SERVICES = {\r\n indexserver: 'Index Server',\r\n nameserver: 'Name Server',\r\n compileserver: 'Compile Server',\r\n preprocessor: 'Preprocessor Server',\r\n webdispatcher: 'SAP Web Dispatcher',\r\n scriptserver: 'Script Server',\r\n docstore: 'Document Store Server',\r\n diserver: 'HDI Server',\r\n xsengine: 'XS Classic Server',\r\n esserver: 'Extended Store Server',\r\n dpserver: 'Data Provisioning Server',\r\n streamingserver: 'Streaming Cluster',\r\n etsserver: 'Accelerator for SAP ASE',\r\n xscontroller: 'SAP HANA XS Controller',\r\n xsexecagent: 'SAP HANA XS Execution Agent',\r\n xsuaaserver: 'SAP HANA XS UAA'\r\n};\r\n\r\nexport const getHANAServiceDisplayName = (s?: string) => (s ? (_HANA_SERVICES[s] ?? s) : \"\");\r\n\r\n/**\r\n * Get the ignored line number from tail (For some reason, hana studio will abandon the last line of nameserver history trace file).\r\n */\r\nexport function getIgnoredLineNumFromTail() {\r\n return _IGNORED_LINE_FROM_TAIL;\r\n}\r\n\r\n/**\r\n * get the port that needs to be displayed from ports list via the selected port\r\n * @param ports overall ports list\r\n * @param port the selected port\r\n */\r\nexport function getDisplayPort(ports: string[], port: string): string {\r\n if (ports != null && ports.length > 0) {\r\n if (port == null || port.length === 0) {\r\n // if no port is selected\r\n if (ports.length === 1) {\r\n // not mdc system, will display the only one\r\n port = ports[0];\r\n } else {\r\n // select the first service (not in _NON_INDEX_SERVER_PORTS list)\r\n port = getRealPorts(ports).find(p => _NON_INDEX_SERVER_PORTS.indexOf(p.slice(-2)) < 0);\r\n if (port == null) {\r\n port = getRealPorts(ports)[0];\r\n }\r\n }\r\n } else {\r\n // get real port is port is some thing like 3**03\r\n if (port.slice(1, 3) === '**') {\r\n port = ports.find(key => key.slice(-2) === port.slice(-2));\r\n } else {\r\n port = ports.find(key => key === port);\r\n }\r\n }\r\n } else {\r\n port = void 0;\r\n }\r\n return port;\r\n}\r\n\r\n/**\r\n * Generate the ports for ngx-select.\r\n * If the provided ports is not null and no port has been selected,\r\n * will choose the first item which is not 01 (nameserver) or 07 (xsengine)\r\n *\r\n */\r\nexport function generatePorts(ports: string[] = null, selectedPort: string = null): Port[] {\r\n if (ports == null) {\r\n return null;\r\n } else {\r\n // if no selection, choose the first item which is not 01 (nameserver) or 07 (xsengine)\r\n if (selectedPort == null || selectedPort === '') {\r\n const firstIndexServer = ports.find(p => _NON_INDEX_SERVER_PORTS.indexOf(p.slice(-2)) < 0);\r\n selectedPort = firstIndexServer ? firstIndexServer : ports[0];\r\n }\r\n\r\n let index = ports.findIndex(port => port === selectedPort);\r\n if (index === -1) {\r\n // selection is not exists in the file\r\n index = 0;\r\n }\r\n const newPorts: Port[] = ports.map(port => ({id: port, text: port}));\r\n newPorts[index].selected = true;\r\n return newPorts;\r\n }\r\n}\r\n\r\n/**\r\n * get unit factor by unit\r\n */\r\nexport function getUnitFactor(unitType: UnitType): number {\r\n let unitFactor = 1;\r\n switch (unitType) {\r\n case UnitType.TypeGB:\r\n // BYTE to GB\r\n unitFactor = 1024 * 1024 * 1024;\r\n break;\r\n case UnitType.TypeMB:\r\n case UnitType.TypeMBSec:\r\n // BYTE to MB\r\n unitFactor = 1024 * 1024;\r\n break;\r\n case UnitType.TypeSecSec:\r\n // micro second to second\r\n unitFactor = 1000000;\r\n }\r\n return unitFactor;\r\n}\r\n/**\r\n * get value by unit (divided by the unit factor).\r\n */\r\nexport function getValueByUnit(value: number, unit: UnitType): number {\r\n return (value / getUnitFactor(unit));\r\n}\r\n\r\n/**\r\n * get rounded value: if value >= 10, round to integer; if value < 10, round to at most 2 decimal places\r\n */\r\nexport function getRoundedValue(value: number): number {\r\n return value >= 10 ? Math.round (value) : Math.round(value * 100) / 100;\r\n}\r\n\r\n/**\r\n * check whether unit is time related.\r\n */\r\nexport function isUnitTimeRelated (unit: UnitType): boolean {\r\n return unit === UnitType.TypeMBSec || unit === UnitType.TypeSec || unit === UnitType.TypeSecSec;\r\n}\r\n\r\n/**\r\n * calculate YScale base on the provided value\r\n */\r\nexport function calculateYScale(value: number): number {\r\n // round up to next 2,5,10,20,50,100,...\r\n if (value <= 0) {\r\n return 100;\r\n }\r\n const scale = Math.pow( 10, Math.floor(Math.log10(value)));\r\n if (scale >= value) {\r\n return scale;\r\n }\r\n if (2 * scale >= value) {\r\n return 2 * scale;\r\n }\r\n if ( 5 * scale >= value) {\r\n return 5 * scale;\r\n }\r\n\r\n return 10 * scale;\r\n}\r\n\r\nexport function isEmptyData(data: ChartContentData): boolean {\r\n if (data) {\r\n return Object.keys(data).findIndex(port => {\r\n if (port != null && data[port]) {\r\n return data[port].findIndex(row => row && row.length > 0) >= 0;\r\n }\r\n return false;\r\n }) < 0;\r\n }\r\n return true;\r\n}\r\n\r\nexport function sleep (time: number): Promise<any> {\r\n return new Promise((resolve) => setTimeout(resolve, time));\r\n}\r\n\r\nexport function setChartHeight(nsAll, nsContent): void {\r\n // const item1 = (document.getElementsByClassName('nameserver-history-all') as HTMLCollectionOf<HTMLElement>)[0];\r\n // const item2 = (document.getElementsByClassName('nameserver-history-content') as HTMLCollectionOf<HTMLElement>)[0];\r\n if (nsAll && nsContent) {\r\n const chartHeight = nsAll.offsetWidth * 0.75 / 2 + 10;\r\n nsContent.style.height = `${chartHeight}px`;\r\n }\r\n}\r\n\r\n","import { isDevMode } from '@angular/core';\r\nimport { getIgnoredLineNumFromTail } from './ui-util';\r\nimport { ChartContentTime } from '../types';\r\nimport { format } from 'date-fns';\r\nimport { TZDateMini } from '@date-fns/tz';\r\n\r\n/**\r\n * get the time range for all ports\r\n */\r\nfunction _getTotalTimeRange(time: ChartContentTime): {startTime: number, endTime: number} {\r\n if (time) {\r\n let startTime = 4102358400000; // 2099/12/31\r\n let endTime = 0;\r\n\r\n Object.keys(time).forEach(port => {\r\n if (time[port]) {\r\n const timeRangeCurrent = _getTimeRange(time[port]);\r\n startTime = startTime > timeRangeCurrent.startTime ? timeRangeCurrent.startTime : startTime;\r\n endTime = endTime < timeRangeCurrent.endTime ? timeRangeCurrent.endTime : endTime;\r\n }\r\n });\r\n\r\n return {startTime: startTime, endTime: endTime};\r\n }\r\n return undefined;\r\n}\r\n\r\n/**\r\n * get the time range (startTime ~ endTime) base on the time (the xScale)\r\n */\r\nfunction _getTimeRange(time: number[]): {startTime: number, endTime: number} {\r\n const ignoredLineNumFromTail = getIgnoredLineNumFromTail();\r\n if (time) {\r\n let startTime = 4102358400000; // 2099/12/31\r\n let endTime = 0;\r\n\r\n const len = time.length;\r\n if (len > ignoredLineNumFromTail) {\r\n startTime = time[0] > startTime ? startTime : time[0];\r\n endTime = time[len - ignoredLineNumFromTail - 1] > endTime ? time[len - ignoredLineNumFromTail - 1] : endTime;\r\n }\r\n\r\n return {startTime: startTime, endTime: endTime};\r\n }\r\n return {startTime: 0, endTime: 0};\r\n}\r\nexport function getEtcTimezones() {\r\n // Add Etc timezones manually since Intl doesn't include them\r\n const etcTimezones = [\r\n 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6',\r\n 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12','Etc/GMT-0',\r\n 'Etc/GMT-1', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6',\r\n 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12',\r\n 'Etc/GMT-13', 'Etc/GMT-14'\r\n ];\r\n\r\n return [...etcTimezones, ...getZeroOffsetEtcZones()];\r\n }\r\n /**\r\n * etc zones with 0 offset\r\n */\r\nexport function getZeroOffsetEtcZones() {\r\n return ['Etc/GMT', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UTC', 'Etc/UCT', 'Etc/Universal', 'Etc/Zulu']\r\n}\r\n\r\n/**\r\n * get default local time zone\r\n */\r\nexport function defaultTimezone(): string {\r\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n}\r\n\r\n/**\r\n * \r\n * @returns get supported timezones from intl\r\n */\r\nexport function supportedTimezones() {\r\n const zones = Intl.supportedValuesOf('timeZone');\r\n // Combine Intl zones with Etc zones\r\n return [...zones, ...getEtcTimezones()];\r\n}\r\n\r\n/**\r\n * Get time from provided timezone, using this only because chart.js doesn't support timezone.\r\n * This function will be removed when chart.js starts to support timezone feature.\r\n * @param time time in seconds (Epoch time)\r\n * @param timezone timezone string, uses local timezone if this is null.\r\n */\r\nexport function getTimeFromTimeZone (time: number, timezone: string): number {\r\n if (timezone == null || timezone.length === 0) {\r\n timezone = defaultTimezone();\r\n console.warn(`getTimeFromTimeZone - Input timezone is null, returning the local (${timezone}) time. `);\r\n }\r\n // Get timezone offsets in milliseconds\r\n const utcOffset = getOffset(timezone, time * 1000);\r\n const currentOffset = getOffset(defaultTimezone(), time * 1000); // seconds\r\n // convert to utc and then to selected timezone\r\n return time + utcOffset - currentOffset;\r\n}\r\n\r\n/**\r\n * get timezone offsests in seconds\r\n */\r\nexport function getOffset(timezone: string, time: number): number {\r\n const date = new Date(time);\r\n let offset: number;\r\n // Handle Etc timezones specially since getTimezoneOffset doesn't support them\r\n if (getZeroOffsetEtcZones().includes(timezone)) {\r\n offset = 0;\r\n } else if (timezone.startsWith('Etc/GMT')) {\r\n // Extract the offset from the zone name\r\n // Note: Etc/GMT+X means UTC-X (opposite sign)\r\n const match = timezone.match(/Etc\\/GMT([+-])(\\d+)/);\r\n if (match) {\r\n const sign = match[1];\r\n const hours = parseInt(match[2], 10);\r\n offset = (sign === '+' ? -hours : +hours) * 60 * 60;\r\n } else {\r\n offset = 0;\r\n }\r\n } else {\r\n offset = (new TZDateMini(date, timezone)).getTimezoneOffset() * -60;\r\n }\r\n return offset;\r\n}\r\n\r\n/**\r\n * Get time formatted with the provided timezone\r\n */\r\nexport function getTimeString (time: number): string {\r\n return format(new Date(time), 'yyyy-MM-dd HH:mm:ss');\r\n}\r\n\r\n/**\r\n * Get the time range string by time array, eg: 2018-10-25 10:10:00 ~ 2018-10-25 12:12:00\r\n */\r\nexport function getTimeRangeString(time: any): string {\r\n let startTimeString = 'N/A';\r\n let endTimeString = 'N/A';\r\n let timeRange;\r\n if (Array.isArray(time)) {\r\n timeRange = _getTimeRange(time);\r\n } else {\r\n timeRange = _getTotalTimeRange(time);\r\n }\r\n\r\n if (timeRange) {\r\n if (timeRange.startTime < 4102358400000) {\r\n startTimeString = getTimeString(timeRange.startTime);\r\n }\r\n\r\n if (timeRange.endTime > 0) {\r\n endTimeString = getTimeString(timeRange.endTime);\r\n }\r\n return `${startTimeString} ~ ${endTimeString}`;\r\n }\r\n return 'N/A ~ N/A';\r\n}\r\n\r\n/**\r\n * print processed time from the provided beginTime, only works in dev mode\r\n */\r\nexport function printProcessedTime(beginTime: Date, step: string): void {\r\n if (isDevMode()) {\r\n // only do it in dev mode\r\n const timeAfter = new Date();\r\n const parsingTime = (timeAfter.getTime() - beginTime.getTime()) / 1000;\r\n console.log(`${step}, Parsing time: ${parsingTime} seconds`);\r\n }\r\n}\r\n","import {getTimeFromTimeZone} from './time-util';\r\n\r\nconst _DEFAULT_PORT = 'DEFAULT';\r\n\r\n/**\r\n * get the default port string (for non-MDC system)\r\n */\r\nexport function getDefaultPort(): string {\r\n return _DEFAULT_PORT;\r\n}\r\n\r\n/**\r\n * get abbreviated file name\r\n * @param fileName\r\n */\r\nexport function getAbbreviatedFileName(fileName: string): string {\r\n return fileName == null || fileName.length <= 22 ? fileName : `${fileName.slice(0, 11)}...${fileName.slice(-11)}`;\r\n}\r\n\r\n/**\r\n * get port if empty return default port\r\n */\r\nexport function getPort(port: string): string {\r\n return port == null || port.length === 0 ? _DEFAULT_PORT : port;\r\n}\r\n\r\n/**\r\n * get all real ports except the default port \"default\"\r\n */\r\nexport function getRealPorts(ports: string[], includeDefault: boolean = false): string[] {\r\n if (ports == null) {\r\n return [];\r\n }\r\n if (includeDefault) {\r\n return ports;\r\n } else {\r\n return ports.filter(port => port !== _DEFAULT_PORT);\r\n }\r\n}\r\n\r\n/**\r\n * get file from <input>\r\n * @param inputTarget\r\n */\r\nexport function getFileFromInput(inputTarget: any): File | null {\r\n if (inputTarget && inputTarget.files && inputTarget.files.length > 0) {\r\n return inputTarget.files[0];\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * get file from drag and drop\r\n */\r\nexport function getFileFromDrop(dragEvent: any): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n if (dragEvent.error) {\r\n reject(dragEvent.error);\r\n } else {\r\n if (dragEvent.file) {\r\n resolve(dragEvent.file);\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Check whether the port from file is the same with the selected port.\r\n * If the selected port is empty, return true directly. This makes all ports will be selected.\r\n * @param portFromFile Port read from file\r\n * @param portFromSelection Port from selection.\r\n * @param isMDC MDC flag\r\n */\r\nexport function isSamePort(portFromFile: string, portFromSelection: string, isMDC: boolean): boolean {\r\n // if it's MDC system, and the port From File is default port, return false\r\n if (isMDC && portFromFile === _DEFAULT_PORT) {\r\n return false;\r\n }\r\n // if selected port is empty, return true directly. This makes all ports being selected\r\n if (portFromSelection == null || portFromSelection.length === 0) {\r\n return true;\r\n }\r\n\r\n return portFromFile === portFromSelection || portFromFile.slice(-2) === portFromSelection.slice(-2);\r\n}\r\n\r\n/**\r\n * As javascript can't get the full path of file, if these two files have same\r\n * 1. lastModified, 2. name, 3. size, these two files are considered as the same file\r\n */\r\nexport function isSameFile(file1: File, file2: File): boolean {\r\n if (file1 && file2) {\r\n if (file1.lastModified === file2.lastModified && file1.name === file2.name && file1.size === file2.size) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * Check whether the provided port is a valid port (3xxxx)\r\n */\r\nexport function isValidPort(port: string): boolean {\r\n return port && port.length === 5 && port[0] === '3';\r\n}\r\n\r\n/**\r\n * get next value from current value base on the operator \"<\" or \">\".\r\n * Keep using current value until the \"nextValue\" is not empty.\r\n */\r\nexport function calculateValue(lastValue: number, nextValue: string): number {\r\n // if the relative value missed, it's null.\r\n // And if it's missed, just use current value from last line.\r\n let newValue = lastValue;\r\n if (nextValue != null && nextValue.length > 0) {\r\n if (nextValue[0] === '<') {\r\n newValue = lastValue - parseFloat(nextValue.slice(1));\r\n } else if (nextValue[0] === '>') {\r\n newValue = lastValue + parseFloat(nextValue.slice(1));\r\n } else {\r\n newValue = parseFloat(nextValue);\r\n }\r\n }\r\n return newValue;\r\n}\r\n\r\n/**\r\n * get next time value from current time base on the operator \"<\" or \">\".\r\n * If nextValue is not \"<\" or \">\", returns converted time base on the timezone\r\n */\r\nexport function calculateValue4Time(lastValue: number, nextValue: string, timezone: string): number {\r\n // if the relative value missed, it's null.\r\n // And if it's missed, just use current value from last line.\r\n let newValue = lastValue;\r\n if (nextValue != null && nextValue.length > 0) {\r\n if (nextValue[0] !== '<' && nextValue[0] !== '>') {\r\n newValue = getTimeFromTimeZone(parseFloat(nextValue), timezone);\r\n } else {\r\n newValue = calculateValue(lastValue, nextValue);\r\n }\r\n }\r\n return newValue;\r\n}\r\n\r\n/**\r\n * check whether the data comes from valid nameserver history file\r\n */\r\nexport function validateData(data: string[][]): boolean {\r\n return data == null ? false : data.length >= 4 && ['host', 'time'].every(i => data[0].includes(i));\r\n}\r\n\r\n/**\r\n * convert blob to file\r\n * @param theBlob\r\n * @param fileName\r\n */\r\nexport function blobToFile (theBlob: Blob, fileName: string): File {\r\n const blob: any = theBlob;\r\n // A Blob() is almost a File() - it's just missing the two properties below which we will add\r\n blob.lastModifiedDate = new Date();\r\n blob.name = fileName;\r\n\r\n // Cast to a File() type\r\n return <File>theBlob;\r\n}\r\n\r\n/**\r\n * check the object is a File object or not a File(Blob)\r\n * @param obj\r\n */\r\nexport function isFile(obj): boolean {\r\n return obj && typeof obj.name === 'string';\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { getIgnoredLineNumFromTail, isUnitTimeRelated, getValueByUnit, getRoundedValue, calculateYScale } from '../utils';\r\nimport {\r\n ColorRgba,\r\n LoadHistoryInfo,\r\n LoadHistoryInfoBackup,\r\n LoadHistoryInfoColumnStore,\r\n LoadHistoryInfoHost,\r\n LoadHistoryInfoIndexServer,\r\n LoadHistoryInfoItem,\r\n LoadHistoryInfoPersistence,\r\n LoadHistoryInfoRowStore,\r\n LoadHistoryInfoSessionAdmissionControl,\r\n LoadHistoryInfoSQL,\r\n LoadHistoryInfoSyncPrimitives,\r\n LoadHistoryInfoThreads,\r\n ChartContentDataItem,\r\n ChartContentHeader,\r\n LegendColor,\r\n ScaleGroup,\r\n Unit,\r\n UnitType,\r\n Item\r\n} from '../types';\r\n\r\n// Using dynamic flag to fix the issue of ng-packagr #696: Lambda not supported\r\n// @dynamic\r\n@Injectable()\r\nexport class UIService {\r\n private readonly _DEFAULT_DISPLAY_ITEMS: string[] = ['cpuUsed', 'indexserverMemUsed', 'mvccNum'];\r\n private readonly _HIDED_COLUMNS: string[] = [Item.yScaleGroup, Item.description];\r\n private readonly _MEASURE_COLUMNS: string[] = [Item.max, Item.average, Item.sum, Item.last];\r\n private _loadHistoryInfos = {};\r\n\r\n /**\r\n * get the colors for legends\r\n */\r\n public static getColors(alpha: number = null): LegendColor {\r\n if (alpha == null) {\r\n alpha = 0.8;\r\n }\r\n return {\r\n cpuUsed : this._getRgbColor(199, 21, 133, alpha), // mediumvioletred\r\n memoryResident : this._getRgbColor(238, 130, 238, alpha), // violet\r\n memoryTotalResident : this._getRgbColor(72, 61, 139, alpha), // darkslateblue\r\n memoryUsed : this._getRgbColor(0, 0, 205, alpha), // mediumblue\r\n memoryLimit : this._getRgbColor(255, 105, 180, alpha), // hotpink\r\n memorySize : this._getRgbColor(70, 130, 180, alpha), // steelblue\r\n diskUsed : this._getRgbColor(25, 25, 112, alpha), // midnightblue\r\n diskSize : this._getRgbColor(0, 255, 255, alpha), // aqua\r\n networkIn : this._getRgbColor(102, 51, 153, alpha), // rebeccapurple\r\n networkOut : this._getRgbColor(245, 222, 179, alpha), // wheat\r\n swapIn : this._getRgbColor(47, 79, 79, alpha), // darkslategray\r\n swapOut : this._getRgbColor(205, 92, 92, alpha), // indianred\r\n indexserverCpu : this._getRgbColor(255, 99, 71, alpha), // tomato\r\n indexserverCpuSys : this._getRgbColor(255, 20, 147, alpha), // deeppink\r\n indexserverMemUsed : this._getRgbColor(0, 255, 0, alpha), // lime\r\n indexserverMemLimit : this._getRgbColor(139, 0, 0, alpha), // darkred\r\n indexserverHandles : this._getRgbColor(139, 0, 139, alpha), // darkmagenta\r\n indexserverPingtime : this._getRgbColor(189, 183, 107, alpha), // darkkhaki\r\n indexserverSwapIn : this._getRgbColor(112, 128, 144, alpha), // slategray\r\n sqlConnections : this._getRgbColor(85, 107, 47, alpha), // darkolivegreen\r\n internalConnections : this._getRgbColor(46, 139, 87, alpha), // seagreen\r\n externalConnections : this._getRgbColor(147, 112, 219, alpha), // mediumpurple\r\n idleConnections : this._getRgbColor(216, 191, 216, alpha), // thistle\r\n sqlTransactions : this._getRgbColor(220, 20, 60, alpha), // crimson\r\n internalTransactions : this._getRgbColor(186, 85, 211, alpha), // mediumorchid\r\n externalTransactions : this._getRgbColor(221, 160, 221, alpha), // plum\r\n userTransactions : this._getRgbColor(210, 105, 30, alpha), // chocolate\r\n sqlBlockedTrans : this._getRgbColor(0, 0, 255, alpha), // blue\r\n sqlStatements : this._getRgbColor(188, 143, 143, alpha), // rosybrown\r\n cidRange : this._getRgbColor(32, 178, 170, alpha), // lightseagreen\r\n tidRange : this._getRgbColor(124, 252, 0, alpha), // lawngreen\r\n pendingRequestCount : this._getRgbColor(160, 32, 240, alpha), // purple3\r\n mvccNum : this._getRgbColor(65, 105, 225, alpha), // royalblue\r\n acquiredRecordLocks : this._getRgbColor(0, 250, 154, alpha), // mediumspringgreen\r\n searchCount : this._getRgbColor(127, 255, 212, alpha), // aquamarine\r\n indexingCount : this._getRgbColor(0, 191, 255, alpha), // deepskyblue\r\n mergeCount : this._getRgbColor(135, 206, 235, alpha), // skyblue\r\n unloadCount : this._getRgbColor(255, 165, 0, alpha), // orange\r\n indexserverThreads : this._getRgbColor(0, 100, 0, alpha), // darkgreen\r\n waitingThreads : this._getRgbColor(176, 48, 96, alpha), // maroon3\r\n totalThreads : this._getRgbColor(100, 149, 237, alpha), // cornflower\r\n activeSqlExecutors : this._getRgbColor(175, 238, 238, alpha), // paleturquoise\r\n waitingSqlExecutors : this._getRgbColor(50, 205, 50, alpha), // limegreen\r\n totalSqlExecutors : this._getRgbColor(240, 230, 140, alpha), // khaki\r\n dataWriteSize : this._getRgbColor(102, 205, 170, alpha), // mediumaquamarine\r\n dataWriteTime : this._getRgbColor(169, 169, 169, alpha), // darkgray\r\n logWriteSize : this._getRgbColor(160, 82, 45, alpha), // sienna\r\n logWriteTime : this._getRgbColor(128, 128, 0, alpha), // olive\r\n dataReadSize : this._getRgbColor(255, 215, 0, alpha), // gold\r\n dataReadTime : this._getRgbColor(95, 158, 160, alpha), // cadetblue\r\n logReadSize : this._getRgbColor(255, 0, 0, alpha), // red\r\n logReadTime : this._getRgbColor(184, 134, 11, alpha), // darkgoldenrod\r\n dataBackupWriteSize : this._getRgbColor(255, 255, 0, alpha), // yellow\r\n dataBackupWriteTime : this._getRgbColor(154, 205, 50, alpha), // yellowgreen\r\n logBackupWriteSize : this._getRgbColor(0, 0, 139, alpha), // darkblue\r\n logBackupWriteTime : this._getRgbColor(219, 112, 147, alpha), // palevioletred\r\n mutexCollisionCount : this._getRgbColor(244, 164, 96, alpha), // sandybrown\r\n readWriteLockCollisionCount : this._getRgbColor(233, 150, 122, alpha), // darksalmon\r\n admissinControlAdmitCount : this._getRgbColor(143, 188, 143, alpha), // darkseagreen\r\n admissionControlRejectCount : this._getRgbColor(255, 0, 255, alpha), // fuchsia\r\n admissionControlWaitingRequests: this._getRgbColor(153, 50, 204, alpha), // darkorchid\r\n admissionControlWaitTime : this._getRgbColor(144, 238, 144, alpha), // lightgreen\r\n };\r\n }\r\n\r\n private static get _unitType(): any {\r\n const unitType = {};\r\n unitType[Unit.PCT] = UnitType.TypeEA;\r\n unitType[Unit.MS] = UnitType.TypeEA;\r\n unitType[Unit.Empty] = UnitType.TypeEA;\r\n unitType[Unit.GB] = UnitType.TypeGB;\r\n unitType[Unit.MB] = UnitType.TypeMB;\r\n unitType[Unit.MBPerSec] = UnitType.TypeMBSec;\r\n unitType[Unit.SecPerSec] = UnitType.TypeSecSec;\r\n unitType[Unit.StmtPerSec] = UnitType.TypeSec;\r\n unitType[Unit.ReqPerSec] = UnitType.TypeSec;\r\n unitType[Unit.ColPerSec] = UnitType.TypeSec;\r\n return unitType;\r\n }\r\n\r\n /**\r\n * get yScale group list from the enum ScaleGroup\r\n */\r\n private static get _YScaleGroupList(): any[] {\r\n return Object.keys(ScaleGroup).filter(key => !isNaN(Number(ScaleGroup[key]))).map(key => ScaleGroup[key]);\r\n }\r\n\r\n /**\r\n * Generate one item by the provided attributes and values\r\n * @param args the dynamic parameter of [attribute, value]\r\n */\r\n private static _generateLoadHistoryInfoItem(...args): LoadHistoryInfoItem {\r\n const obj = {};\r\n if (!args || args.length <= 0) {\r\n return obj;\r\n }\r\n\r\n args.forEach(item => {\r\n if (item && item.length >= 2) {\r\n obj[item[0]] = item[1];\r\n }\r\n });\r\n return obj;\r\n }\r\n\r\n /**\r\n * generate the loadHistoryInfo object with default values.\r\n */\r\n private static _generateLoadHistoryInfo(): LoadHistoryInfo {\r\n // minimum value for YScale of swapIn, swapOut, indexserverSwapIn is 100 (according to hana studio)\r\n const infoItem = UIService._generateLoadHistoryInfoItem; // just for making the name shorter...\r\n const cpuUsed = infoItem([Item.kpi, 'CPU' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.CPU ], [Item.unit, Unit.PCT ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'CPU Used by all processes']);\r\n const memoryResident = infoItem([Item.kpi, 'Database Resident Memory' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Physical memory used for all HANA processes']);\r\n const memoryTotalResident = infoItem([Item.kpi, 'Total Resident Memory' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Physical memory used for all processes']);\r\n const memoryUsed = infoItem([Item.kpi, 'Database Used Memory' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory used for all HANA processes']);\r\n const memoryLimit = infoItem([Item.kpi, 'Database Allocation Limit' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory allocation limit for all processes of HANA instance']);\r\n const memorySize = infoItem([Item.kpi, 'Physical Memory Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Physical memory size']);\r\n const diskUsed = infoItem([Item.kpi, 'Disk Used' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Disk ], [Item.unit, Unit.GB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Disk used']);\r\n const diskSize = infoItem([Item.kpi, 'Disk Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Disk ], [Item.unit, Unit.GB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Disk size']);\r\n const networkIn = infoItem([Item.kpi, 'Network In' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Network], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from network by all processes']);\r\n const networkOut = infoItem([Item.kpi, 'Network Out' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Network], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to network by all processes']);\r\n const swapIn = infoItem([Item.kpi, 'Swap In' ], [Item.yScale, 100], [Item.yScaleGroup, ScaleGroup.Swap ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from swap by all processes (pswpin line in /proc/vmstat * sysconf(_SC_PAGESIZE))']);\r\n const swapOut = infoItem([Item.kpi, 'Swap Out' ], [Item.yScale, 100], [Item.yScaleGroup, ScaleGroup.Swap ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written To swap by all processes (pswpout line in /proc/vmstat * sysconf(_SC_PAGESIZE))']);\r\n const indexserverCpu = infoItem([Item.kpi, 'Service CPU' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.CPU ], [Item.unit, Unit.PCT ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'CPU used by Service']);\r\n const indexserverCpuSys = infoItem([Item.kpi, 'System CPU' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.CPU ], [Item.unit, Unit.PCT ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'OS Kernel/System CPU used by Service']);\r\n const indexserverMemUsed = infoItem([Item.kpi, 'Memory Used' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory used by Service']);\r\n const indexserverMemLimit = infoItem([Item.kpi, 'Memory Allocation Limit' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Memory ], [Item.unit, Unit.MB ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Memory allocation limit for Service']);\r\n const indexserverHandles = infoItem([Item.kpi, 'Handles' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open handles']);\r\n const indexserverPingtime = infoItem([Item.kpi, 'Ping Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.MS ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Duration of Service ping request (THREAD_METHOD=\\'__nsWatchdog\\'). This request includes the collection of service specific KPI\\'s']);\r\n const indexserverSwapIn = infoItem([Item.kpi, 'Service Swap In' ], [Item.yScale, 100], [Item.yScaleGroup, ScaleGroup.Swap ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from swap by Service (column 12(majflt) in /proc/<pid>/stat * sysconf(_SC_PAGESIZE))']);\r\n const sqlConnections = infoItem([Item.kpi, 'Open Connections' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Conn ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL connections']);\r\n const internalConnections = infoItem([Item.kpi, 'Internal Connections' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Conn ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL internal connections']);\r\n const externalConnections = infoItem([Item.kpi, 'External Connections' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Conn ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL external connections']);\r\n const idleConnections = infoItem([Item.kpi, 'Idle Connections' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Conn ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL idle connections']);\r\n const sqlTransactions = infoItem([Item.kpi, 'Open Transactions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Trans ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of open SQL transactions']);\r\n const internalTransactions = infoItem([Item.kpi, 'Internal Transactions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Trans ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of internal transactions']);\r\n const externalTransactions = infoItem([Item.kpi, 'External Transactions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Trans ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of external transactions']);\r\n const userTransactions = infoItem([Item.kpi, 'User Transactions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Trans ], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of user transactions']);\r\n const sqlBlockedTrans = infoItem([Item.kpi, 'Blocked Transactions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of blocked SQL transactions']);\r\n const sqlStatements = infoItem([Item.kpi, 'Statements' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Stmt ], [Item.unit, Unit.StmtPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of finished SQL statements']);\r\n const cidRange = infoItem([Item.kpi, 'Active Commit ID Range' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Range between newest and oldest active commit ID']);\r\n const tidRange = infoItem([Item.kpi, 'Active Transaction ID Range'], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Range between newest and oldest active transaction ID']);\r\n const pendingRequestCount = infoItem([Item.kpi, 'Pending Request Count' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of pending session requests']);\r\n const mvccNum = infoItem([Item.kpi, 'Active Versions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of active MVCC versions']);\r\n const acquiredRecordLocks = infoItem([Item.kpi, 'Acquired Record Locks' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of acquired record locks']);\r\n const searchCount = infoItem([Item.kpi, 'Read Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Req ], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of read requests (select)']);\r\n const indexingCount = infoItem([Item.kpi, 'Write Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Req ], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of write requests (insert,update,delete)']);\r\n const mergeCount = infoItem([Item.kpi, 'Merge Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Req ], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of merge requests']);\r\n const unloadCount = infoItem([Item.kpi, 'Column Unloads' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Req ], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of column unloads']);\r\n const indexserverThreads = infoItem([Item.kpi, 'Active Threads' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of active threads']);\r\n const waitingThreads = infoItem([Item.kpi, 'Waiting Threads' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of waiting threads']);\r\n const totalThreads = infoItem([Item.kpi, 'Total Threads' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Total number of threads']);\r\n const activeSqlExecutors = infoItem([Item.kpi, 'Active SqlExecutors' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of active SqlExecutors']);\r\n const waitingSqlExecutors = infoItem([Item.kpi, 'Waiting SqlExecutors' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of waiting SqlExecutors']);\r\n const totalSqlExecutors = infoItem([Item.kpi, 'Total SqlExecutors' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.Empty ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Total number of SqlExecutors']);\r\n const dataWriteSize = infoItem([Item.kpi, 'Data Write Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to data area']);\r\n const dataWriteTime = infoItem([Item.kpi, 'Data Write Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to data area']);\r\n const logWriteSize = infoItem([Item.kpi, 'Log Write Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to log area']);\r\n const logWriteTime = infoItem([Item.kpi, 'Log Write Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to log area']);\r\n const dataReadSize = infoItem([Item.kpi, 'Data Read Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from data area']);\r\n const dataReadTime = infoItem([Item.kpi, 'Data Read Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for reading from data area']);\r\n const logReadSize = infoItem([Item.kpi, 'Log Read Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from log area']);\r\n const logReadTime = infoItem([Item.kpi, 'Log Read Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for reading from log area']);\r\n const dataBackupWriteSize = infoItem([Item.kpi, 'Data Backup Write Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to data backup']);\r\n const dataBackupWriteTime = infoItem([Item.kpi, 'Data Backup Write Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to data backup']);\r\n const logBackupWriteSize = infoItem([Item.kpi, 'Log Backup Write Size' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRSize ], [Item.unit, Unit.MBPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes written to log backup']);\r\n const logBackupWriteTime = infoItem([Item.kpi, 'Log Backup Write Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.WRTime ], [Item.unit, Unit.SecPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Time used for writing to log backup']);\r\n const mutexCollisionCount = infoItem([Item.kpi, 'Mutex Collisions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ColPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of collisions on mutexes']);\r\n const readWriteLockCollisionCount = infoItem([Item.kpi, 'Read/Write Lock Collisions' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ColPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of collisions on read/write locks']);\r\n const admissinControlAdmitCount = infoItem([Item.kpi, 'Admitted Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests admitted by admission control']);\r\n const admissionControlRejectCount = infoItem([Item.kpi, 'Rejected Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests rejected by admission control']);\r\n const admissionControlWaitingRequests = infoItem([Item.kpi, 'Waiting Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests waiting in admission control queue']);\r\n const admissionControlWaitTime = infoItem([Item.kpi, 'Wait Time' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.SecPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Total wait time of session requests queued in admission control queue']);\r\n const admissionControlEnqueueCount = infoItem([Item.kpi, 'Enqueued Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests enqueued by admission control']);\r\n const admissionControlDequeueCount = infoItem([Item.kpi, 'Dequeued Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of session requests dequeued by admission control']);\r\n const admissionControlTimeoutCount = infoItem([Item.kpi, 'Timed out Requests' ], [Item.yScale, 0, ], [Item.yScaleGroup, ScaleGroup.Unknown], [Item.unit, Unit.ReqPerSec ], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Number of timed out session requests in admission control queue']);\r\n\r\n // generate Host\r\n const loadHistoryInfoHost: LoadHistoryInfoHost = {\r\n cpuUsed : cpuUsed ,\r\n memoryResident : memoryResident ,\r\n memoryTotalResident : memoryTotalResident,\r\n memoryUsed : memoryUsed ,\r\n memoryLimit : memoryLimit ,\r\n memorySize : memorySize ,\r\n diskUsed : diskUsed ,\r\n diskSize : diskSize ,\r\n networkIn : networkIn ,\r\n networkOut : networkOut ,\r\n swapIn : swapIn ,\r\n swapOut : swapOut ,\r\n };\r\n // generate Index Server\r\n const loadHistoryInfoIndexServer: LoadHistoryInfoIndexServer = {\r\n indexserverCpu : indexserverCpu ,\r\n indexserverCpuSys : indexserverCpuSys ,\r\n indexserverMemUsed : indexserverMemUsed ,\r\n indexserverMemLimit : indexserverMemLimit ,\r\n indexserverHandles : indexserverHandles ,\r\n indexserverPingtime : indexserverPingtime ,\r\n indexserverSwapIn : indexserverSwapIn ,\r\n };\r\n // generate SQL\r\n const loadHistoryInfoSQL: LoadHistoryInfoSQL = {\r\n sqlConnections : sqlConnections ,\r\n internalConnections : internalConnections ,\r\n externalConnections : externalConnections ,\r\n idleConnections : idleConnections ,\r\n sqlTransactions : sqlTransactions ,\r\n internalTransactions : internalTransactions,\r\n externalTransactions : externalTransactions,\r\n userTransactions : userTransactions ,\r\n sqlBlockedTrans : sqlBlockedTrans ,\r\n sqlStatements : sqlStatements ,\r\n cidRange : cidRange ,\r\n tidRange : tidRange ,\r\n pendingRequestCount : pendingRequestCount ,\r\n };\r\n // generate Row Store\r\n const loadHistoryInfoRowStore: LoadHistoryInfoRowStore = {\r\n mvccNum : mvccNum ,\r\n acquiredRecordLocks : acquiredRecordLocks,\r\n };\r\n // generate Column Store\r\n const loadHistoryInfoColumnStore: LoadHistoryInfoColumnStore = {\r\n searchCount : searchCount ,\r\n indexingCount : indexingCount,\r\n mergeCount : mergeCount ,\r\n unloadCount : unloadCount ,\r\n };\r\n // generate Threads\r\n const loadHistoryInfoThreads: LoadHistoryInfoThreads = {\r\n indexserverThreads : indexserverThreads ,\r\n waitingThreads : waitingThreads ,\r\n totalThreads : totalThreads ,\r\n activeSqlExecutors : activeSqlExecutors ,\r\n waitingSqlExecutors : waitingSqlExecutors,\r\n totalSqlExecutors : totalSqlExecutors ,\r\n };\r\n // generate Persistence\r\n const loadHistoryInfoPersistence: LoadHistoryInfoPersistence = {\r\n dataWriteSize : dataWriteSize,\r\n dataWriteTime : dataWriteTime,\r\n logWriteSize : logWriteSize ,\r\n logWriteTime : logWriteTime ,\r\n\r\n dataReadSize : dataReadSize ,\r\n dataReadTime : dataReadTime ,\r\n logReadSize : logReadSize ,\r\n logReadTime : logReadTime ,\r\n };\r\n // generate Backup\r\n const loadHistoryInfoBackup: LoadHistoryInfoBackup = {\r\n dataBackupWriteSize : dataBackupWriteSize,\r\n dataBackupWriteTime : dataBackupWriteTime,\r\n logBackupWriteSize : logBackupWriteSize ,\r\n logBackupWriteTime : logBackupWriteTime ,\r\n };\r\n // generate Synchronization Primitives\r\n const loadHistoryInfoSynchronizationPrimitives: LoadHistoryInfoSyncPrimitives = {\r\n mutexCollisionCount : mutexCollisionCount ,\r\n readWriteLockCollisionCount : readWriteLockCollisionCount,\r\n };\r\n // Session Admission Control\r\n const loadHistoryInfoSessionAdmissionControl: LoadHistoryInfoSessionAdmissionControl = {\r\n admissinControlAdmitCount : admissinControlAdmitCount ,\r\n admissionControlRejectCount : admissionControlRejectCount ,\r\n admissionControlWaitingRequests : admissionControlWaitingRequests,\r\n admissionControlWaitTime : admissionControlWaitTime ,\r\n admissionControlEnqueueCount : admissionControlEnqueueCount ,\r\n admissionControlDequeueCount : admissionControlDequeueCount ,\r\n admissionControlTimeoutCount : admissionControlTimeoutCount ,\r\n };\r\n\r\n return {\r\n 'Host': loadHistoryInfoHost,\r\n 'Service': loadHistoryInfoIndexServer,\r\n 'SQL': loadHistoryInfoSQL,\r\n 'Row Store': loadHistoryInfoRowStore,\r\n 'Column Store': loadHistoryInfoColumnStore,\r\n 'Threads': loadHistoryInfoThreads,\r\n 'Persistence': loadHistoryInfoPersistence,\r\n 'Backup': loadHistoryInfoBackup,\r\n 'Synchronization Primitives': loadHistoryInfoSynchronizationPrimitives,\r\n 'Session Admission Control': loadHistoryInfoSessionAdmissionControl\r\n };\r\n }\r\n\r\n /**\r\n * get rgbcolor object via red, green, blue and alpha.\r\n */\r\n private static _getRgbColor(red: number, green: number, blue: number, alpha: number): ColorRgba {\r\n return {red: red, green: green, blue: blue, alpha: alpha};\r\n }\r\n\r\n private static _getYScaleForItem(item: any, yScale: number): number {\r\n return yScale > item[Item.yScale] ? (item[Item.unit] === Unit.PCT ? 100 : yScale) : item[Item.yScale];\r\n }\r\n\r\n private static _getMaxValueOfGroup(groupItems: any): number {\r\n let max = 0;\r\n if (groupItems) {\r\n max = groupItems.reduce((maxValue, current) => {\r\n return current.Max > maxValue ? current.Max : maxValue;\r\n }, 0);\r\n }\r\n return max;\r\n }\r\n\r\n private _getLoadHistoryInfo(port: string): LoadHistoryInfo {\r\n if (!this._loadHistoryInfos[port]) {\r\n this._loadHistoryInfos[port] = UIService._generateLoadHistoryInfo();\r\n }\r\n return this._loadHistoryInfos[port];\r\n }\r\n\r\n private _getProcessingUnit(itemKey: string, port: string): UnitType {\r\n const historyDetailItem: LoadHistoryInfoItem = this._getItemByKey(itemKey, port);\r\n if (historyDetailItem) {\r\n let unit = historyDetailItem.Unit;\r\n if (!unit) {\r\n unit = '';\r\n }\r\n return UIService._unitType[unit];\r\n }\r\n return UnitType.TypeEA; // default return value\r\n }\r\n\r\n private _setOverview (key: string, overview: LoadHistoryInfoItem, unit: UnitType, port: string) {\r\n const historyDetailItem = this._getItemByKey(key, port);\r\n if (historyDetailItem) {\r\n historyDetailItem.Max = overview.Max >= 0 ? overview.Max : 0;\r\n historyDetailItem.Average = overview.Average >= 0 ? overview.Average : 0;\r\n // only TYPE_CONVERSION_MBSEC and TYPE_CONVERTION_SEC (eg: MB/s, req/s stmt/s...) need sum\r\n historyDetailItem.Sum = isUnitTimeRelated(unit) ? (overview.Sum >= 0 ? overview.Sum : 0) : '-';\r\n historyDetailItem.Last = overview.Last >= 0 ? overview.Last : 0;\r\n }\r\n }\r\n\r\n /**\r\n * convert unit values (eg: byte to MB or GB) and generate the control data (sum, max, avg) for one row\r\n */\r\n private _convertUnitAndGenerateRowControlData(row: ChartContentDataItem[], key: string, unit: UnitType, port: string): Promise<void> {\r\n return new Promise(resolve => {\r\n if (row) {\r\n const overview: LoadHistoryInfoItem = {Sum: 0, Max: 0, Average: 0, Last: 0};\r\n const ignoredTailLineNum = getIgnoredLineNumFromTail();\r\n let invalidCount = 0;\r\n // convert unit and calculate the overview data, skip the first, and last three rows.\r\n row.forEach((item, index, arrayData) => {\r\n // skip ignored line(s) from tail\r\n if (index <= row.length - ignoredTailLineNum - 1) {\r\n if (arrayData[index].y >= 0) {\r\n arrayData[index].y = getValueByUnit(item.y, unit);\r\n overview.Sum += arrayData[index].y;\r\n if (isUnitTimeRelated(unit)) {\r\n if (index === 0) {\r\n // according to hana studio, for those time related column, the first value is set to 0\r\n arrayData[index].y = 0;\r\n } else {\r\n // get value for unit like: MB/s (value / seconds)\r\n const timeDiff = arrayData[index].x - arrayData[index - 1].x;\r\n arrayData[index].y = timeDiff !== 0 ? arrayData[index].y * 1000 / timeDiff : 0;\r\n }\r\n }\r\n arrayData[index].y = getRoundedValue(arrayData[index].y);\r\n\r\n if (arrayData[index].y > overview.Max) {\r\n overview.Max = arrayData[index].y;\r\n }\r\n } else {\r\n // set value to 0, for those points with value -1 or < 0\r\n arrayData[index].y = 0;\r\n // invalid count + 1, for calculating the average (not time relative)\r\n invalidCount++;\r\n }\r\n }\r\n });\r\n\r\n if (row.length >= (ignoredTailLineNum + invalidCount)) {\r\n if (isUnitTimeRelated(unit)) {\r\n const timePeriod = row[row.length - ignoredTailLineNum - 1].x - row[0].x;\r\n overview.Average = timePeriod !== 0 ? getRoundedValue(overview.Sum * 1000 / timePeriod) : 0;\r\n } else {\r\n const validItemCount = row.length - ignoredTailLineNum - invalidCount;\r\n overview.Average = validItemCount > 0 ? getRoundedValue(overview.Sum / validItemCount) : 0;\r\n }\r\n overview.Last = row[row.length - ignoredTailLineNum - 1].y;\r\n overview.Sum = getRoundedValue(overview.Sum);\r\n overview.Max = getRoundedValue(overview.Max);\r\n\r\n // remove those ignored lines\r\n row.length = row.length - ignoredTailLineNum;\r\n }\r\n this._setOverview(key, overview, unit, port);\r\n }\r\n resolve();\r\n });\r\n }\r\n\r\n /**\r\n * Loop from all history items, put those history items which\r\n * have the same yScaleGroup together, using yScaleGroup as key.\r\n * eg: {__SCALE_GROUP_CPU:[item1, item2...], __SCALE_GROUP_UNKNOWN:[item3, item4...]}\r\n */\r\n private _getYScaleGroupWithHistoryItems(port: string): {} {\r\n const yScaleGroup = {};\r\n const loadHistoryInfo = this._getLoadHistoryInfo(port);\r\n\r\n Object.keys(loadHistoryInfo).forEach(parentKey => {\r\n Object.keys(loadHistoryInfo[parentKey]).forEach(childKey => {\r\n const detailItem = loadHistoryInfo[parentKey][childKey];\r\n const yScaleGroupKey = detailItem._YScaleGroup;\r\n if (!yScaleGroup[yScaleGroupKey]) {\r\n yScaleGroup[yScaleGroupKey] = [];\r\n }\r\n yScaleGroup[yScaleGroupKey].push(detailItem);\r\n });\r\n });\r\n return yScaleGroup;\r\n }\r\n\r\n private _setYScaleOfGroup(groupItems: any, group: ScaleGroup) {\r\n if (groupItems) {\r\n if (group === ScaleGroup.Unknown) {\r\n groupItems.forEach(item => item[Item.yScale] = UIService._getYScaleForItem(item, calculateYScale(item.Max)));\r\n } else {\r\n const yScale = calculateYScale(UIService._getMaxValueOfGroup(groupItems));\r\n groupItems.forEach(item => item[Item.yScale] = UIService._getYScaleForItem(item, yScale));\r\n }\r\n }\r\n }\r\n\r\n private _getItemByKey(key: string, port: string): any {\r\n const loadHistoryInfo = this._getLoadHistoryInfo(port);\r\n for ( const itemKey of Object.keys(loadHistoryInfo)) {\r\n if (key in loadHistoryInfo[itemKey]) {\r\n return loadHistoryInfo[itemKey][key];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * reset the load history info object, to prevent memory leak\r\n */\r\n public clearLoadHistoryInfos() {\r\n this._loadHistoryInfos = {};\r\n }\r\n\r\n /**\r\n * get all the data for the selection table\r\n */\r\n public getSelectionTableRows(headerKeys: string[], port: string, defaultDisplayItems: string[]): any[] {\r\n const rows: any[] = [];\r\n const loadHistoryInfo = this._getLoadHistoryInfo(port);\r\n\r\n const defaultItems = defaultDisplayItems && defaultDisplayItems.length > 0 ? defaultDisplayItems : this._DEFAULT_DISPLAY_ITEMS;\r\n\r\n Object.keys(loadHistoryInfo).forEach(keyParent => {\r\n rows.push({KPI: keyParent, header: true});\r\n const len = rows.length;\r\n rows.push(...Object.keys(loadHistoryInfo[keyParent])\r\n .filter(keyChild => headerKeys.includes(keyChild))\r\n .map(keyChild => {\r\n loadHistoryInfo[keyParent][keyChild].header = false;\r\n loadHistoryInfo[keyParent][keyChild].checked = defaultItems.includes(keyChild);\r\n return loadHistoryInfo[keyParent][keyChild];\r\n }));\r\n if (len === rows.length) {\r\n // no sub items, remove the header\r\n rows.pop();\r\n }\r\n });\r\n\r\n return rows;\r\n }\r\n\r\n /**\r\n * get all hidden columns. Those hidden columns = input hidden columns + default hidden columns\r\n * @param hideMeasureColumns the array contains the columns list that need to be hidden.\r\n */\r\n public getHiddenColumns(hideMeasureColumns: string[]): string[] {\r\n // only measure columns can be hidden\r\n const hideColumns = hideMeasureColumns ? hideMeasureColumns.filter(column => this._MEASURE_COLUMNS.includes(column)) : [];\r\n return hideColumns ? this._HIDED_COLUMNS.concat(hideColumns) : this._HIDED_COLUMNS;\r\n }\r\n\r\n /**\r\n * get header information and format it to {headKey: key, headText: text}\r\n */\r\n public getHeader(keys: string[], port: string): ChartContentHeader[] {\r\n return keys.map(key => {\r\n const item = this._getItemByKey(key, port);\r\n if (item != null && 'KPI' in item) {\r\n return ({key: key, text: item.KPI});\r\n } else {\r\n console.warn(`${key} is not configured.`);\r\n return null;\r\n }\r\n }).filter(key => key != null );\r\n }\r\n\r\n /**\r\n * Get the selected items, which need to be displayed on the chart.\r\n * @param headerKeys array that contains the keys of header\r\n * @param port the relative port\r\n * @param defaultDisplayItems the items list that will be displayed by default.\r\n */\r\n public getDisplayItems(headerKeys: string[], port: string, defaultDisplayItems: string[]): string[] {\r\n const selectionTable = this.getSelectionTableRows(headerKeys, port, defaultDisplayItems);\r\n return selectionTable.filter(row => row.checked).map(row => row.KPI);\r\n }\r\n\r\n /**\r\n * Get the Y Scale by the keys and port\r\n */\r\n public getYScale(keys: string[], port: string): number[] {\r\n const yScales = [];\r\n if (keys) {\r\n keys.forEach(key => {\r\n yScales.push(this._getItemByKey(key, port)[Item.yScale]);\r\n });\r\n }\r\n return yScales;\r\n }\r\n\r\n /**\r\n * Generate Y Scale for the port\r\n */\r\n public generateYScale(port: string): void {\r\n const yScaleGroup = this._getYScaleGroupWithHistoryItems(port);\r\n UIService._YScaleGroupList.forEach(group => {\r\n const historyItems = yScaleGroup[group];\r\n if (historyItems) {\r\n this._setYScaleOfGroup(historyItems, group);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * convert unit values (eg: byte to MB or GB) and generate the control data (sum, max, avg)\r\n * @param data the nameserver history data\r\n * @param header header list\r\n * @param port selected port\r\n */\r\n public convertUnitAndGenerateControlData(data: ChartContentDataItem[][], header: string[], port: string): Promise<any> {\r\n const promises = [];\r\n if (data && header) {\r\n data.forEach((row, index) => {\r\n if (row) {\r\n // get detail history item key, like indexserverCpu\r\n const itemKey = header[index];\r\n const unit = this._getProcessingUnit(itemKey, port);\r\n promises.push(this._convertUnitAndGenerateRowControlData(row, itemKey, unit, port));\r\n }\r\n });\r\n }\r\n return Promise.all(promises);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport {\r\n Chart,\r\n ChartConfiguration,\r\n ChartDataset,\r\n registerables,\r\n TimeScale,\r\n LinearScale,\r\n CategoryScale,\r\n PointElement,\r\n LineElement,\r\n Title,\r\n Tooltip,\r\n Legend,\r\n Filler,\r\n Decimation\r\n} from 'chart.js';\r\nimport 'chartjs-adapter-date-fns';\r\nimport zoomPlugin from 'chartjs-plugin-zoom';\r\nimport { getColorString, getNumberWithCommas, randomColor } from '../utils';\r\nimport { UIService } from './ui.service';\r\nimport { ChartContentDataItem, LegendColor, Item, Unit } from '../types';\r\n\r\n// Register Chart.js components and plugins\r\nChart.register(\r\n ...registerables,\r\n TimeScale,\r\n LinearScale,\r\n CategoryScale,\r\n PointElement,\r\n LineElement,\r\n Title,\r\n Tooltip,\r\n Legend,\r\n Filler,\r\n Decimation,\r\n zoomPlugin\r\n);\r\n\r\nconst MAX_POINTS_TO_RENDER = 100;\r\n\r\n@Injectable()\r\nexport class ChartService {\r\n private _chart: Chart;\r\n\r\n /**\r\n * toggle the dataset status of the chart, synchronously\r\n */\r\n private static _toggleDataSet(dataSetIndex: number, chart: Chart, hidden: boolean): void {\r\n // meta.hidden = false and dataset.hidden = false --> show\r\n // meta.hidden = false and dataset.hidden = true --> show\r\n // meta.hidden = null and dataset.hidden = false -> show\r\n // meta.hidden = null and dataset.hidden = true -> hide\r\n // in the first case (false, false), needs to click legend twice to\r\n // hide the dataset, because the first click only set meta.hidden = null)\r\n if (dataSetIndex != null && chart != null) {\r\n const meta = chart.getDatasetMeta(dataSetIndex);\r\n if (meta) {\r\n if (!hidden) {\r\n // display the item, if dataset hidden is false, set hidden of meta to null,\r\n meta.hidden = !chart.data.datasets[dataSetIndex].hidden ? null : hidden;\r\n } else {\r\n meta.hidden = hidden;\r\n }\r\n }\r\n }\r\n }\r\n \r\n private static _restoreDataSetStatus(chart: Chart, datasetIndex: number, status: {metaStatus: boolean, datasetStatus: boolean}): void {\r\n if (chart && chart.data && chart.data.datasets && chart.getDatasetMeta(datasetIndex) && status) {\r\n chart.data.datasets[datasetIndex].hidden = status.datasetStatus;\r\n chart.getDatasetMeta(datasetIndex).hidden = status.metaStatus;\r\n }\r\n }\r\n\r\n /**\r\n * initialize/clear the configuration for the chart\r\n */\r\n private static _initConfig(chart: any): void {\r\n // init data sets\r\n if (chart.data?.datasets) {\r\n chart.data.datasets.length = 0;\r\n chart.data.datasets = void 0;\r\n chart.data = void 0;\r\n }\r\n // init options\r\n if (chart.options?.scales) {\r\n chart.options.scales = void 0;\r\n chart.options = void 0;\r\n }\r\n }\r\n\r\n /**\r\n * Generate DataSets by the data and header information\r\n */\r\n private static _generateDataSets(data: ChartContentDataItem[][], header: string[], headerKey: string[], defaultItems: string[], yScale: number[]): ChartDataset<'line'>[] {\r\n const alpha = 0.5;\r\n const colors: LegendColor = UIService.getColors(alpha);\r\n return data.map((item, i) => {\r\n const color = colors[headerKey[i]] ? getColorString(colors[headerKey[i]]) : randomColor(alpha);\r\n // only cap 100 which is percentage\r\n if (yScale[i] === 100) {\r\n // to save some memory, change the value directly\r\n // cappedData = item.map(dp =>\r\n // dp.y > 100 ? { ...dp, y: 100, originalY: dp.y } : dp\r\n // );\r\n // }\r\n for(let j = 0, len = item.length; j < len; j++) {\r\n const dp: any = item[j];\r\n if (dp.y > 100) {\r\n dp.originalY = dp.y;\r\n dp.y = 100;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n borderColor: color,\r\n backgroundColor: color,\r\n borderWidth: 1,\r\n spanGaps: false,\r\n label: header[i],\r\n data: item,\r\n fill: false,\r\n yAxisID: `y-axis-${i}`,\r\n hidden: !defaultItems.includes(header[i]),\r\n pointRadius: 0,\r\n pointHitRadius: 5,\r\n pointHoverRadius: 5,\r\n // Enable smooth curves for more natural line appearance\r\n tension: 0.2,\r\n // Enable decimation for each dataset\r\n parsing: false,\r\n normalized: true\r\n };\r\n });\r\n }\r\n\r\n private static _generateScales(timeArray: number[], data: ChartContentDataItem[][], yScaleArray: number[]): any {\r\n const scales: any = {\r\n x: {\r\n type: 'time',\r\n time: {\r\n displayFormats: {\r\n 'millisecond': 'MMMdd HH:mm:ss',\r\n 'second': 'MMMdd HH:mm:ss',\r\n 'minute': 'MMMdd HH:mm',\r\n 'hour': 'MMMdd HH',\r\n 'day': 'MMMdd',\r\n 'week': 'MMMdd',\r\n 'month': 'MMM yyyy',\r\n 'quarter': 'MMM yyyy',\r\n 'year': 'MMM yyyy',\r\n },\r\n tooltipFormat: 'MMM dd, yyyy HH:mm:ss'\r\n },\r\n min: timeArray[0],\r\n max: timeArray[timeArray.length - 1],\r\n ticks: {\r\n source: 'auto',\r\n maxRotation: 0,\r\n autoSkip: true,\r\n autoSkipPadding: 40, // label space\r\n },\r\n reverse: false\r\n }\r\n };\r\n\r\n // Add Y axes\r\n data.forEach((item, i) => {\r\n scales[`y-axis-${i}`] = {\r\n type: 'linear',\r\n display: false,\r\n position: 'left',\r\n grid: {\r\n drawOnChartArea: i === 0, // only show grid for first axis\r\n },\r\n min: 0,\r\n max: yScaleArray[i]\r\n };\r\n });\r\n\r\n return scales;\r\n }\r\n\r\n /**\r\n * generate configuration for chart\r\n */\r\n private static _generateChartConfig(time: number[],\r\n data: ChartContentDataItem[][],\r\n yScale: number[],\r\n header: string[],\r\n headerKey: string[],\r\n selection: SelectionModel<any>,\r\n tableSource: any,\r\n title: string,\r\n defaultItems: string[],\r\n zoomCallback: any): ChartConfiguration<'line'> {\r\n return {\r\n type: 'line',\r\n data: {\r\n datasets: ChartService._generateDataSets(data, header, headerKey, defaultItems, yScale)\r\n },\r\n options: {\r\n layout: {\r\n padding: {\r\n right: 25 // Add padding to the right side of the chart\r\n }\r\n },\r\n interaction: {\r\n intersect: true, // true means must actually hover over a point\r\n axis: 'x',\r\n mode: 'index' // when intersecting, show all datasets at the same index/x position\r\n },\r\n responsive: true,\r\n animation: false, // must disable it otherwise zoomin will hang\r\n onHover: (event: any, elements: any) => {\r\n const target = event.native?.target || event.target;\r\n if (target) {\r\n (target as HTMLElement).style.cursor = elements?.length > 0 ? 'pointer' : 'default';\r\n }\r\n },\r\n elements: {point: { radius: 0, hitRadius: 5, hoverRadius: 5 }}, // set radius to 0 not to display point\r\n parsing: false,\r\n normalized: true,\r\n datasets: {line: { pointRadius: 0, pointHitRadius: 5, pointHoverRadius: 5}},\r\n plugins: {\r\n legend: {\r\n position: 'bottom',\r\n onHover: (event: any, legendItem: any) => {\r\n const target = event.native?.target || event.target;\r\n if (target) {\r\n (target as HTMLElement).style.cursor = 'pointer';\r\n }\r\n },\r\n labels: {\r\n filter: (legendItem) => selection.isSelected(tableSource.find(row => legendItem.text === row.KPI))\r\n }\r\n },\r\n title: {\r\n display: true,\r\n text: title\r\n },\r\n tooltip: {\r\n mode: 'nearest',\r\n intersect: true, // true means only show tooltip for the closest point\r\n callbacks: {\r\n label: function(context) {\r\n // format numbers with commas and add unit information\r\n const label = context.dataset.label || '';\r\n if (label) {\r\n // get unit (eg: MB, GB, MB/s, % and so on)\r\n const rowItem = tableSource.find(controlTableRow => label === controlTableRow.KPI) || '';\r\n const unit = rowItem[Item.unit] && rowItem[Item.unit] !== Unit.PCT ? ` ${rowItem[Item.unit]}` : rowItem[Item.unit] || '';\r\n // Use original value if available, otherwise use displayed value\r\n const valueToShow = (context.raw as any)?.originalY ?? context.parsed.y;\r\n return `${label}: ${getNumberWithCommas(valueToShow)}${unit}`;\r\n } else {\r\n // Use original value if available, otherwise use displayed value\r\n const valueToShow = (context.raw as any)?.originalY ?? context.parsed.y;\r\n return getNumberWithCommas(valueToShow);\r\n }\r\n }\r\n }\r\n },\r\n // downsampling\r\n decimation: {\r\n enabled: true,\r\n algorithm: 'lttb', // Largest-Triangle-Three-Buckets algorithm\r\n samples: 600, // Increased samples for better quality\r\n threshold: 1 // increase it may hang the ui due to swith of using/not using downsampling, disable it (set it to 0), will slowdown average zoom in.\r\n },\r\n zoom: {\r\n limits: {\r\n x: {\r\n min: 'original',\r\n max: 'original',\r\n //minRange: 180000 // 3 min the min range that can be zoomed\r\n }\r\n },\r\n pan: {\r\n enabled: true,\r\n mode: 'x',\r\n modifierKey: 'ctrl'\r\n },\r\n zoom: {\r\n // wheel: {\r\n // enabled: true,\r\n // speed: 0.02 \r\n // },\r\n // pinch: {\r\n // enabled: true\r\n // },\r\n drag: {\r\n enabled: true,\r\n threshold: 10,\r\n drawTime: 'beforeDraw'\r\n },\r\n mode: 'x',\r\n onZoom: zoomCallback,\r\n onZoomComplete: (context => {\r\n const chart = context?.chart;\r\n if (!chart?.data?.datasets) {\r\n return;\r\n }\r\n // make point visible when current points are less than MAX_POINTS_TO_RENDER\r\n const pointRadiusChangeFlag = chart.data.datasets.some(dataset => dataset.data.length <= MAX_POINTS_TO_RENDER);\r\n const pointRadius = pointRadiusChangeFlag ? 2 : 0;\r\n chart.data.datasets.forEach((dataset: any) => {\r\n dataset.pointRadius = pointRadius;\r\n });\r\n\r\n if (chart.options?.elements?.point) {\r\n chart.options.elements.point.radius = pointRadius;\r\n }\r\n chart.update();\r\n })\r\n }\r\n }\r\n },\r\n scales: ChartService._generateScales(time, data, yScale)\r\n }\r\n };\r\n }\r\n\r\n private _getDataSetIndexByLabel(label: string, chart: Chart): number {\r\n if (chart.data && chart.data.datasets) {\r\n return chart.data.datasets.findIndex(dataset => dataset.label === label);\r\n }\r\n return -1;\r\n }\r\n\r\n /**\r\n * WORKAROUND: Setup mousemove event listener to fix Chart.js tooltip issue\r\n * Issue: https://github.com/chartjs/Chart.js/issues/11972\r\n * TODO: Remove this entire method when the Chart.js bug is fixed\r\n */\r\n private _setupTooltipWorkaround(chart: Chart): void {\r\n const canvas = chart.canvas;\r\n const mouseMoveHandler = (event: MouseEvent) => {\r\n const rect = canvas.getBoundingClientRect();\r\n const x = event.clientX - rect.left;\r\n const y = event.clientY - rect.top;\r\n \r\n // Check if mouse is within chart area\r\n const chartArea = chart.chartArea;\r\n if (chartArea) {\r\n const isInChartArea = x >= chartArea.left && x <= chartArea.right && \r\n y <= chartArea.bottom && y >= chartArea.top;\r\n \r\n // Get legend area (legend is positioned at bottom)\r\n const legendArea = chart.legend;\r\n let isInLegendArea = false;\r\n if (legendArea && (legendArea as any).legendHitBoxes) {\r\n isInLegendArea = (legendArea as any).legendHitBoxes.some((hitBox: any) => \r\n x >= hitBox.left && x <= hitBox.left + hitBox.width &&\r\n y >= hitBox.top && y <= hitBox.top + hitBox.height\r\n );\r\n }\r\n \r\n if (!isInChartArea && !isInLegendArea) {\r\n // Mouse is in axis area (but not legend), force hide tooltip and active points\r\n if (chart.tooltip) {\r\n chart.tooltip.setActiveElements([], {x: 0, y: 0});\r\n }\r\n // Clear active elements to hide hover points\r\n chart.setActiveElements([]);\r\n chart.update('none');\r\n canvas.style.cursor = 'default';\r\n }\r\n }\r\n };\r\n \r\n canvas.addEventListener('mousemove', mouseMoveHandler);\r\n \r\n // Store the handler for cleanup\r\n (chart as any)._mouseMoveHandler = mouseMoveHandler;\r\n }\r\n\r\n /**\r\n * WORKAROUND: Clean up mousemove event listener for Chart.js tooltip issue\r\n * Issue: https://github.com/chartjs/Chart.js/issues/11972\r\n * TODO: Remove this entire method when the Chart.js bug is fixed\r\n */\r\n private _cleanupTooltipWorkaround(chart: Chart): void {\r\n const canvas = chart.canvas;\r\n const mouseMoveHandler = (chart as any)._mouseMoveHandler;\r\n if (canvas && mouseMoveHandler) {\r\n canvas.removeEventListener('mousemove', mouseMoveHandler);\r\n }\r\n }\r\n\r\n /**\r\n * destroy the chart, release the resource of the chart\r\n */\r\n private _destroyChart(chart: Chart): Promise<void> {\r\n return new Promise((resolve) => {\r\n if (chart) {\r\n // WORKAROUND: Clean up tooltip workaround - TODO: Remove when Chart.js bug is fixed\r\n this._cleanupTooltipWorkaround(chart);\r\n chart.destroy();\r\n }\r\n resolve();\r\n });\r\n }\r\n \r\n /**\r\n * update/refresh the chart\r\n */\r\n private _updateChart(chart: Chart): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n if (chart) {\r\n chart.update();\r\n resolve();\r\n } else {\r\n reject('Updating chart failed, error: the chart object is empty.');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * reset zoom of the chart\r\n */\r\n private _resetZoom(chart: any): Promise<{metaStatus: boolean, datasetStatus: boolean}[]> {\r\n return new Promise((resolve, reject) => {\r\n if (chart) {\r\n const datasetStatusBeforeReset = [];\r\n if (chart.data && chart.data.datasets) {\r\n chart.data.datasets.forEach((dataset, index) => {\r\n const meta = chart.getDatasetMeta(index);\r\n if (meta) {\r\n datasetStatusBeforeReset[index] = {metaStatus: meta.hidden, datasetStatus: dataset.hidden};\r\n } else {\r\n reject(`Internal error, can not find the meta ${index}.`);\r\n }\r\n });\r\n }\r\n // Use the zoom plugin's resetZoom method\r\n if (chart.resetZoom) {\r\n chart.resetZoom();\r\n }\r\n resolve(datasetStatusBeforeReset);\r\n } else {\r\n reject('Resetting chart failed, error: the chart object is empty.');\r\n }\r\n });\r\n }\r\n \r\n /**\r\n * Reset Chart to initial status\r\n * If legend is already selected/unselected from the list, it wouldn't be restored.\r\n * @param dataSourceData the data sets of the chart\r\n * @param selection selection status list\r\n */\r\n public resetChart(dataSourceData: any, selection: SelectionModel<any>): Promise <any> {\r\n return this._resetZoom(this._chart).then((datasetStatusBeforeZoom) => {\r\n // reset the data set by the selection status\r\n dataSourceData.filter(row => !row.header).forEach(row => {\r\n const index = this._getDataSetIndexByLabel(row.KPI, this._chart);\r\n if (!selection.isSelected(row)) {\r\n ChartService._toggleDataSet(index, this._chart, true);\r\n } else {\r\n ChartService._restoreDataSetStatus(this._chart, index, datasetStatusBeforeZoom[index]);\r\n }\r\n });\r\n return this._updateChart(this._chart);\r\n });\r\n }\r\n\r\n /**\r\n * destroy the chart and reinitialize the configuration of the chart\r\n */\r\n public destroyChart(): Promise<any> {\r\n return this._destroyChart(this._chart).then(() => {\r\n if (this._chart) {\r\n ChartService._initConfig(this._chart);\r\n this._chart = void 0;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * generate configuration for chart and create the chart object.\r\n */\r\n public buildChart(time: number[],\r\n data: ChartContentDataItem[][],\r\n yScale: number[],\r\n header: string[],\r\n headerKey: string[],\r\n selection: SelectionModel<any>,\r\n tableSource: any,\r\n title: string,\r\n defaultItems: string[],\r\n zoomCB): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n const ctx = (<HTMLCanvasElement> document.getElementById('chartNameServerHistory'))?.getContext('2d');\r\n if (ctx) {\r\n this._chart = new Chart(ctx, ChartService._generateChartConfig(time, data, yScale, header, headerKey, selection, tableSource, title, defaultItems, zoomCB));\r\n // WORKAROUND: Setup tooltip workaround - TODO: Remove when Chart.js bug is fixed\r\n this._setupTooltipWorkaround(this._chart);\r\n resolve();\r\n } else {\r\n reject('Can not find the canvas.');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * show/hide the relative data set\r\n */\r\n public toggleDataInChart(label: string, hide: boolean): Promise<any> {\r\n return new Promise((resolve) => {\r\n ChartService._toggleDataSet(this._getDataSetIndexByLabel(label, this._chart), this._chart, hide);\r\n resolve(this._updateChart(this._chart));\r\n });\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {\r\n calculateValue,\r\n calculateValue4Time,\r\n getDefaultPort,\r\n getPort,\r\n getTimeFromTimeZone,\r\n isSamePort,\r\n isValidPort,\r\n printProcessedTime,\r\n validateData\r\n} from '../utils';\r\nimport {parse} from 'papaparse';\r\nimport {Abort, ChartContent, ChartContentData, ChartContentTime} from '../types';\r\n\r\n/**\r\n * prevent browser from crashing, set the max rows limitation.\r\n * This could be overwritten by the input:maxRowsLimitation of the component.\r\n */\r\nconst _DEFAULT_MAX_ROWS_IN_MEMORY = 100000;\r\n\r\n@Injectable()\r\nexport class FileService {\r\n /**\r\n * prevent browser from crashing, set the max rows limitation.\r\n * @param limitation if this parameter is not null, the default value will be overwritten by this one.\r\n */\r\n private static _getMaxRowsLimitation(limitation: any = null) {\r\n if (limitation == null || isNaN(limitation) || limitation.length === 0) {\r\n return _DEFAULT_MAX_ROWS_IN_MEMORY;\r\n }\r\n return Number(limitation);\r\n }\r\n\r\n /**\r\n * get all available ports from data\r\n */\r\n private static _getPorts(data: string[][], firstChunk: boolean, ports: string[]) {\r\n let line = 0;\r\n if (firstChunk) {\r\n // start from line 3\r\n line = 2;\r\n }\r\n\r\n for (; line < data.length; line++) {\r\n const dataItem = data[line][1];\r\n if (dataItem != null && dataItem.length > 0) {\r\n if (isValidPort(dataItem) && ports.indexOf(dataItem) === -1) {\r\n ports.push(dataItem);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * get the time column from the analyzed data\r\n * @param data the analyzed data\r\n * @param firstChunk whether it's first chunk or not\r\n * @param startTime selected starting time. It's millisecond, need to be converted second.\r\n * @param endTime selected ending time. It's millisecond, need to be converted second.\r\n * @param lastProcessedTime last processed time form last chunk\r\n * @param time time object which contains the time data for all ports\r\n * @param selectedPort if the selected port is empty (did not select any port), all ports info are needed\r\n * @param isMDC flag for MDC system\r\n * @param timezone selected timezone\r\n * @param maxRowsLimitation prevent browser from crashing, set the max rows limitation.\r\n * This comes from the input: maxRowsLimitation of the component.\r\n */\r\n private static _getTimeColumn(data: string[][],\r\n firstChunk: boolean,\r\n startTime: number,\r\n endTime: number,\r\n lastProcessedTime: number,\r\n time: ChartContentTime,\r\n selectedPort: string,\r\n isMDC: boolean,\r\n timezone: string,\r\n maxRowsLimitation: any) {\r\n // convert millisecond to second for startTime and endTime.\r\n startTime = startTime / 1000;\r\n endTime = endTime / 1000;\r\n const timeColumn = 2;\r\n let startLine = 0;\r\n let iStart = -1;\r\n let iEnd = -1;\r\n\r\n let curTime = lastProcessedTime;\r\n let lastProcessedTimeReturn;\r\n let totalNum = 0;\r\n let mdcFlag = isMDC;\r\n const defaultPort = getDefaultPort();\r\n const maxRowNum = this._getMaxRowsLimitation(maxRowsLimitation);\r\n\r\n if (firstChunk) {\r\n if (curTime >= startTime && curTime <= endTime) {\r\n iStart = 1; // start from first line\r\n\r\n /** Modified at 2018/10/10,\r\n * in some case, eg: the nameserver history trace gets modified by Kook, Jin Young's python script,\r\n * the port show in the first line as well, and does not like the non-mdc system, this kind of file has\r\n * one port in it. The history for non-mdc system doesn't have port info in the port column.*/\r\n\r\n // get port for the line 1.\r\n const firstLinePort = getPort(data[1][1]);\r\n // init time array for the first line.\r\n if (!selectedPort || selectedPort.length === 0 || isSamePort(firstLinePort, selectedPort, mdcFlag)) {\r\n // does not select any port or\r\n // it's non-mdc (mdcFlag is false at the beginning) system and the selected port is the first line port\r\n time[firstLinePort] = [];\r\n time[firstLinePort][0] = curTime * 1000;\r\n }\r\n }\r\n lastProcessedTimeReturn = curTime;\r\n startLine = 2;\r\n }\r\n\r\n // get current total number\r\n Object.keys(time).forEach(key => {\r\n if (time[key]) {\r\n totalNum += time[key].length;\r\n }\r\n });\r\n\r\n if (curTime == null) {\r\n console.error('getTimeColumn', 'Can not get the time from the file, internal error!');\r\n return {indexStart: null, indexEnd: null, lastProcessedTime: null, isMDC: null};\r\n }\r\n\r\n for (let i = startLine; i < data.length; i++) {\r\n // sometime the last line is empty, need to be skipped.\r\n if (data[i] == null || data[i].length === 0 || (data[i].length === 1 && data[i][0].length === 0)) {\r\n continue;\r\n }\r\n\r\n // get port number and initialize the relative port array in time\r\n const port = getPort(data[i][1]); // data[i][1] == null || data[i][1].length == 0 ? __DEFAULT_PORT : data[i][1];\r\n if (!(port in time)) {\r\n // add undefined port to time, then we can find all ports in time\r\n time[port] = void 0;\r\n }\r\n if (time[port] == null && isSamePort(port, selectedPort, mdcFlag)) {\r\n time[port] = [];\r\n // if other ports exists in this file, default port will be set to undefined.\r\n if (!mdcFlag && port !== defaultPort && time[defaultPort]) {\r\n // update the total num;\r\n totalNum -= time[defaultPort].length;\r\n time[defaultPort].length = 0;\r\n time[defaultPort] = void 0;\r\n mdcFlag = true;\r\n }\r\n }\r\n curTime = calculateValue4Time(curTime, data[i][timeColumn], timezone);\r\n if (curTime > endTime) {\r\n if (iEnd < 0) {\r\n iEnd = i - 1;\r\n }\r\n break;\r\n }\r\n if (iStart >= 0) {\r\n if (time[port]) {\r\n // not null means it's the selected port\r\n time[port][time[port].length] = curTime * 1000;\r\n totalNum ++;\r\n }\r\n } else {\r\n if (curTime >= startTime && curTime <= endTime) {\r\n if (time[port]) {\r\n // only selected port counted in\r\n if (iStart < 0) {\r\n iStart = i;\r\n }\r\n time[port][time[port].length] = curTime * 1000;\r\n totalNum ++;\r\n }\r\n }\r\n }\r\n // last processed time need to be recorded anyway\r\n lastProcessedTimeReturn = curTime;\r\n\r\n if (totalNum >= maxRowNum) {\r\n iEnd = i;\r\n break;\r\n }\r\n }\r\n return {indexStart: iStart, indexEnd: iEnd, lastProcessedTime: lastProcessedTimeReturn, isMDC: mdcFlag};\r\n }\r\n\r\n /**\r\n * Get data for all columns\r\n * @param columnNum the total number of columns. For mdc system,\r\n * the length of each row is different. Host relative data does not exist in tenant line.\r\n * Needs to use column number from the first line.\r\n * @param data data parsed by papa\r\n * @param firstChunk the flag which identifies whether it's the first chunk or not.\r\n * @param time\r\n * @param indexStart\r\n * @param indexEnd\r\n * @param lastProcessedLine\r\n * @param resultData the result data after analyzed\r\n * @param selectedPort\r\n * @param isMDC\r\n */\r\n private static _getDataColumns(columnNum: number,\r\n data: string[][],\r\n firstChunk: boolean,\r\n time: ChartContentTime,\r\n indexStart: number,\r\n indexEnd: number,\r\n lastProcessedLine: number[],\r\n resultData: ChartContentData,\r\n selectedPort: string,\r\n isMDC: boolean) {\r\n let startLine = 0;\r\n // for mdc system, the length is not correct (host relative data only exists in the \"empty\" port line).\r\n // Needs to use header from the first line.\r\n // const columnNum = data[0].length;\r\n\r\n if (firstChunk) {\r\n /**\r\n * Modified at 2018/10/10,\r\n * in some case, eg: the nameserver history trace gets modified by Kook, Jin Young's python script,\r\n * the port show in the first line as well, and does not like the non-mdc system, this kind of file has\r\n * one port in it. The history for non-mdc system doesn't have port info in the port column.\r\n */\r\n\r\n // get port for the line 1.\r\n const firstLinePort = getPort(data[1][1]);\r\n // Initialize data column with default 'DEFAULT' port if it's not MDC system. MDC system, 'DEFAULT' gets ignored\r\n if (!isMDC && time[firstLinePort]) {\r\n resultData[firstLinePort] = [];\r\n // removed below logic, because first line is the real number, do not need to do the convert.\r\n // curLine = data[1].slice(3).map(Number);\r\n for (let j = 3; j < columnNum; j++) {\r\n const index = j - 3;\r\n\r\n // initialize data array for all columns of the default '0000' port\r\n resultData[firstLinePort][index] = [];\r\n // get the first line data of the column if it's included\r\n if (indexStart === 1) {\r\n resultData[firstLinePort][index][0] = {x: time[firstLinePort][0], y: lastProcessedLine[index]};\r\n }\r\n }\r\n }\r\n startLine = 2;\r\n }\r\n\r\n for (let j = 3; j < columnNum; j++) {\r\n const index = j - 3;\r\n for (let i = startLine; i < data.length; i++) {\r\n // sometime the last line is empty, need to be skipped.\r\n if (data[i] == null || data[i].length === 0 || (data[i].length === 1 && data[i][0].length === 0)) {\r\n continue;\r\n }\r\n\r\n // get port number and initialize the relative port array in data\r\n const port = getPort(data[i][1]);\r\n if (resultData[port] == null && isSamePort(port, selectedPort, isMDC)) {\r\n resultData[port] = [];\r\n }\r\n if (resultData[port] && resultData[port][index] == null) {\r\n resultData[port][index] = [];\r\n }\r\n\r\n lastProcessedLine[index] = calculateValue(lastProcessedLine[index], data[i][j]);\r\n if (i >= indexStart && (i <= indexEnd || indexEnd < 0) && indexStart >= 0) {\r\n if (resultData[port]) {\r\n const length = resultData[port][index].length;\r\n resultData[port][index][length] = {x: time[port][length], y: lastProcessedLine[index]};\r\n }\r\n } else if (indexEnd > 0 && i > indexEnd) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get Chart data from provided file.\r\n * @param file the nameserver history file\r\n * @param startTime\r\n * @param endTime\r\n * @param port\r\n * @param timezone\r\n * @param maxRowsLimitation prevent browser from crashing, set the max rows limitation.\r\n * @param progress call back function for updating progress\r\n */\r\n public getChartContentFromFile(file: File,\r\n startTime: number,\r\n endTime: number,\r\n port: string,\r\n timezone: string,\r\n maxRowsLimitation: any,\r\n progress: any): Promise<ChartContent> {\r\n // load done, beginning parsing\r\n const beginTime = new Date();\r\n let firstChunk = true;\r\n // save last processed data just for the later calculation\r\n let lastProcessedData;\r\n // save last processed time just for the later calculation\r\n let lastProcessedTime;\r\n // save last processed cursor position for progress calculation.\r\n // let lastProcessedCursor = 0;\r\n let indexStart = -1, indexEnd = -1;\r\n const time: ChartContentTime = {};\r\n const data: ChartContentData = {};\r\n let header;\r\n let host;\r\n let isMDC = false;\r\n let columnNum;\r\n let abortType: Abort;\r\n\r\n const rejectAndAbort = (reject, parser) => {\r\n if (progress) {\r\n progress(100);\r\n }\r\n reject(`${file.name} is empty or the format is not correct.`);\r\n parser.abort();\r\n };\r\n return new Promise((resolve, reject) => {\r\n parse(file, {\r\n chunk: (results, parser) => {\r\n // the progress increment of this step\r\n // let analyzeStepProgress = (results.meta.cursor - lastProcessedCursor) / file.size * 100;\r\n printProcessedTime(beginTime, 'step1');\r\n if (indexEnd >= 0) {\r\n // already finished, quite.\r\n return;\r\n } else {\r\n // reset start point\r\n indexStart = -1;\r\n }\r\n\r\n // get time column\r\n if (firstChunk) {\r\n if (!validateData(results.data)) {\r\n return rejectAndAbort(reject, parser);\r\n }\r\n\r\n // initialize the header\r\n header = results.data[0].slice(3);\r\n // get column number\r\n columnNum = results.data[0].length;\r\n // get host name\r\n host = results.data[1][0];\r\n // get the first line time info from first line, it is a real number, do not need to do the convert with \">,<\".\r\n lastProcessedTime = getTimeFromTimeZone(parseFloat(results.data[1][2]), timezone);\r\n // get the first line data info from first line, it is a real number, do not need to do the convert with \">,<\".\r\n lastProcessedData = results.data[1].slice(3).map(Number);\r\n }\r\n\r\n printProcessedTime(beginTime, 'step2');\r\n\r\n if (!lastProcessedData) {\r\n return rejectAndAbort(reject, parser);\r\n }\r\n\r\n // get time column\r\n ({indexStart, indexEnd, lastProcessedTime, isMDC} = FileService._getTimeColumn(\r\n results.data, firstChunk, startTime, endTime, lastProcessedTime, time, port, isMDC, timezone, maxRowsLimitation));\r\n printProcessedTime(beginTime, 'step3');\r\n\r\n if (indexStart == null && indexEnd == null && lastProcessedTime == null && isMDC == null) {\r\n return rejectAndAbort(reject, parser);\r\n }\r\n\r\n // get all other data columns\r\n FileService._getDataColumns(\r\n columnNum, results.data, firstChunk, time, indexStart, indexEnd, lastProcessedData, data, port, isMDC);\r\n\r\n if (firstChunk) {\r\n firstChunk = false;\r\n }\r\n\r\n printProcessedTime(beginTime, 'step4');\r\n\r\n if (indexEnd >= 0) {\r\n // do not need to process the left parts, manually trigger complete\r\n const processedLines = Object.keys(time).reduce((total, curKey) => time[curKey] ? total + time[curKey].length : total, 0);\r\n if (processedLines >= FileService._getMaxRowsLimitation(maxRowsLimitation)) {\r\n abortType = Abort.maxLineNumReached;\r\n } else {\r\n abortType = Abort.maxTimeRangeReached;\r\n }\r\n\r\n if (progress) {\r\n progress(100);\r\n }\r\n parser.abort();\r\n return;\r\n } else {\r\n // the overall progress if this step is finished\r\n if (progress) {\r\n progress(Math.round(results.meta.cursor / file.size * 100));\r\n }\r\n // lastProcessedCursor = results.meta.cursor;\r\n }\r\n },\r\n complete: () => {\r\n printProcessedTime(beginTime, 'step_complete');\r\n resolve ({header: header, host: host, time: time, data: data, aborted: abortType});\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Get all ports from the name server history file\r\n * @param file the name server history file\r\n * @param progress call back for updating the progress\r\n */\r\n public getPortsFromFile(file: File, progress: any): Promise<string[]> {\r\n const beginTime = new Date();\r\n let firstChunk = true;\r\n const ports = [];\r\n const defaultPort = getDefaultPort();\r\n return new Promise((resolve, reject) => {\r\n parse(file, {\r\n chunk: (results, parser) => {\r\n // get time column\r\n if (firstChunk) {\r\n if (!validateData(results.data)) {\r\n if (progress) {\r\n progress(100);\r\n }\r\n reject(`${file.name} is empty or the format is not correct.`);\r\n parser.abort();\r\n return;\r\n }\r\n }\r\n printProcessedTime(beginTime, 'port.step1');\r\n FileService._getPorts(results.data, firstChunk, ports);\r\n if (firstChunk) {\r\n firstChunk = false;\r\n }\r\n if (progress) {\r\n progress(Math.round(results.meta.cursor / file.size * 100));\r\n }\r\n },\r\n complete: () => {\r\n // parsing done\r\n printProcessedTime(beginTime, 'step_complete');\r\n if (ports.length === 0) {\r\n ports[0] = defaultPort;\r\n }\r\n resolve (ports);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'file-drop-input',\r\n template: `\r\n <div class=\"file-drop-input\" [class.file-drop-dropping]=\"droppingFlag\" (drop)=\"onDropFiles($event)\"\r\n (dragover)=\"onDragOver($event)\" (dragleave)=\"onDragLeave($event)\">\r\n <div class=\"drop-content\">\r\n <label class=\"input-button\">\r\n <input type=\"file\" (change)=\"browseFiles($event)\" accept=\".trc\"/> {{inputAreaText}} \r\n </label>{{dropAreaText}}\r\n </div>\r\n </div>\r\n `,\r\n styleUrls: ['./file-drop-input.component.scss']\r\n})\r\n\r\nexport class FileDropInputComponent {\r\n\r\n @Input()\r\n dropAreaText = '';\r\n @Input()\r\n inputAreaText = '';\r\n @Output()\r\n public fileDrop: EventEmitter<any> = new EventEmitter<any>();\r\n @Output()\r\n public fileInput: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n droppingFlag = false;\r\n\r\n private static _stopAndPrevent(event) {\r\n event.stopPropagation(); // Stops some browsers from redirecting.\r\n event.preventDefault(); // Stops some browsers' default action, like open the file directly\r\n }\r\n\r\n public browseFiles(event: Event): void {\r\n this.fileInput.emit(event);\r\n }\r\n\r\n public onDragOver(event: Event): void {\r\n FileDropInputComponent._stopAndPrevent(event);\r\n if (!this.droppingFlag) {\r\n this.droppingFlag = true;\r\n }\r\n }\r\n\r\n public onDragLeave(event: Event): void {\r\n FileDropInputComponent._stopAndPrevent(event);\r\n if (this.droppingFlag) {\r\n this.droppingFlag = false;\r\n }\r\n }\r\n\r\n public onDropFiles(event: any) {\r\n FileDropInputComponent._stopAndPrevent(event);\r\n this.droppingFlag = false;\r\n let length = 0;\r\n if (event.dataTransfer.items) {\r\n length = event.dataTransfer.items.length;\r\n } else {\r\n length = event.dataTransfer.files.length;\r\n }\r\n\r\n if (length > 1) {\r\n event.error = 'Multiple files/folders are not supported';\r\n this.fileDrop.emit(event);\r\n return;\r\n }\r\n\r\n if (length === 1) {\r\n let fileEntry;\r\n if (event.dataTransfer.items) {\r\n if (event.dataTransfer.items[0].webkitGetAsEntry) {\r\n fileEntry = event.dataTransfer.items[0].webkitGetAsEntry();\r\n }\r\n } else {\r\n if (event.dataTransfer.files[0].webkitGetAsEntry) {\r\n fileEntry = event.dataTransfer.files[0].webkitGetAsEntry();\r\n }\r\n }\r\n if (fileEntry) {\r\n if (fileEntry.isFile) {\r\n event.error = void 0;\r\n } else if (fileEntry.isDirectory) {\r\n event.error = `Folder (${fileEntry.name}) is not supported.`;\r\n } else {\r\n event.error = `Internal error, can not get the type of the dropped item (${fileEntry.name}).`;\r\n }\r\n }\r\n\r\n const file: File = event.dataTransfer.files && event.dataTransfer.files.length > 0 ? event.dataTransfer.files[0] : null;\r\n if (file) {\r\n event.file = file;\r\n } else {\r\n event.error = 'Internal error, can not get the dropped file.';\r\n }\r\n this.fileDrop.emit(event);\r\n return;\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'instruction',\r\n templateUrl: './instruction.component.html',\r\n styleUrls: ['./instruction.component.scss'],\r\n imports: [ CommonModule ]\r\n})\r\n\r\nexport class InstructionComponent {\r\n @Input()\r\n step1Finished = false;\r\n @Input()\r\n step2Finished = false;\r\n @Input()\r\n step3Finished = false;\r\n @Input()\r\n step4Finished = false;\r\n @Input()\r\n step5Finished = false;\r\n @Input()\r\n show = true;\r\n /**\r\n * Output event bind to (show)\r\n */\r\n @Output() showChange = new EventEmitter<boolean>();\r\n onClose() {\r\n this.show = false;\r\n this.showChange.emit(this.show);\r\n }\r\n}\r\n","<div class=\"instruction\" *ngIf=\"show\">\r\n <div class=\"close\" (click)=\"onClose()\">×</div>\r\n <div class=\"mandatory\" [class.completed]=\"step1Finished\">\r\n <label>Select nameserver history file <span class=\"flag\">*</span></label> <br>\r\n <ul>\r\n <li>Click the \"Browse\" </li>\r\n <li>Drag and drop your file to \"Drop File Here\"</li>\r\n </ul>\r\n </div>\r\n <div class=\"optional\" [class.completed]=\"step2Finished\">\r\n <label>Select time range and timezone <span class=\"flag\">(optional)</span></label> <br>\r\n <ul>\r\n <li>If you do not select time range, this tool will read from the beginning until it reaches the configured maxRowsLimitation. </li>\r\n <li>If you do not select time zone, this tool will use your local default timezone.</li>\r\n </ul>\r\n </div>\r\n <div class=\"optional\" [class.completed]=\"step3Finished\">\r\n <label>Select ports <span class=\"flag\">(optional)</span></label> <br>\r\n <ul>\r\n <li>If you do not choose any port, this tool will try to load data for all ports until it reaches the configured maxRowsLimitation.</li>\r\n <li>After choosing one port, this tool will only try to load data for the selected port until it reaches the configured maxRowsLimitation.</li>\r\n <li>If you do not know any port information, you can click \"Load\" to load all ports from the nameserver history file.</li>\r\n </ul>\r\n </div>\r\n <div class=\"mandatory\" [class.completed]=\"step4Finished\">\r\n <label>Load the data from nameserver history file and show the chart <span class=\"flag\">*</span></label> <br>\r\n <ul><li>Click button \"Show\"</li></ul>\r\n </div>\r\n <div class=\"optional\" [class.completed]=\"step5Finished\">\r\n <label>Reset the chart <span class=\"flag\">(optional)</span></label> <br>\r\n <ul><li>If you zoomed in, you can go back to original status by clicking \"Reset Chart\"</li></ul>\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { Port } from '../../types';\r\n\r\n@Injectable()\r\nexport class PortSelectorService {\r\n\r\n private _defaultPorts: Port[];\r\n /**\r\n * generate the default ports from 3**01 to 3**99\r\n * the ports which used (3**01, 3**03, 3**07, 3**40, 3**43, 3*46, 3**49, 3**52, 3**55, 3*58, 3**61 ...)\r\n * by hana normally will be put in the first places\r\n */\r\n private _getDefaultPorts(): Port[] {\r\n if (this._defaultPorts) {\r\n return this._defaultPorts;\r\n }\r\n // name server, default index server and xsengine\r\n this._defaultPorts = [\r\n {id: '3**01', text: '3**01'},\r\n {id: '3**03', text: '3**03'},\r\n {id: '3**07', text: '3**07'}\r\n ];\r\n // tenant index servers\r\n for (let i = 40; i < 100; i += 3) {\r\n this._defaultPorts.push({id: `3**${i}`, text: `3**${i}`});\r\n }\r\n // others\r\n for (let i = 1; i < 100; i++) {\r\n const port = i > 9 ? `3**${i}` : `3**0${i}`;\r\n if (this._defaultPorts.findIndex(item => item.id === port) < 0) {\r\n this._defaultPorts.push({id: port, text: port});\r\n }\r\n }\r\n return this._defaultPorts;\r\n }\r\n\r\n getPorts(ports: Port[] = null): Port[] {\r\n return ports != null && ports.length > 0 ? ports : this._getDefaultPorts();\r\n }\r\n}\r\n","import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter } from '@angular/core';\r\nimport { PortSelectorService } from './port-selector.service';\r\nimport { Port } from '../../types';\r\nimport { DropdownListComponent } from 'ngx-dropdown-list';\r\n\r\n@Component({\r\n selector: 'port-selector',\r\n template: `\r\n <label style=\"width: 100%\">\r\n <ngx-dropdown-list (selectionChange)=\"onChange($event)\"\r\n [items]=\"displayPorts\"\r\n [multiSelection]=\"false\"\r\n [placeHolder]=\"'Ports'\"\r\n [(selectedValue)]=\"port\"\r\n [filterBox]=\"true\"\r\n [disabled]=\"disabled\">\r\n </ngx-dropdown-list>\r\n </label>\r\n `,\r\n providers: [ PortSelectorService ],\r\n imports: [ DropdownListComponent ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PortSelectorComponent {\r\n /**\r\n * Input: boolean (optional) bind to [disabled]\r\n */\r\n @Input() disabled = false;\r\n\r\n /**\r\n * Output event bind to (port)\r\n */\r\n @Output() portChange = new EventEmitter<string>();\r\n\r\n /**\r\n * Input: string (required) bind to [port]\r\n */\r\n @Input() port: string;\r\n\r\n /**\r\n * Input: array (required) bind to [ports]\r\n */\r\n @Input() ports: Port[];\r\n\r\n get displayPorts() {\r\n return this.service.getPorts(this.ports);\r\n }\r\n\r\n constructor(private service: PortSelectorService) {}\r\n\r\n /**\r\n * onChange function called by the \"ngx-select\" element\r\n */\r\n onChange(event: any) {\r\n this.portChange.emit(event);\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'progress-bar',\r\n styleUrls: ['./progress-bar.component.scss'],\r\n template: `\r\n <div class=\"progress-content\">\r\n <div class=\"progress\">\r\n <span class=\"bar\" [style.width]=\"progress + '%'\" [class.is-done]=\"progress == 100\"></span>\r\n </div>\r\n </div>\r\n <div class=\"progress-text-content\">\r\n <span class=\"progress-text\" [class.is-done]=\"progress === 100\">\r\n <span>{{ progress }}% </span>\r\n <span *ngIf=\"progress < 100\">Parsing...</span> <!--{{file?.name}}-->\r\n <span *ngIf=\"progress === 100\">Done</span>\r\n </span>\r\n </div>\r\n `,\r\n imports: [ CommonModule ]\r\n})\r\n\r\nexport class ProgressBarComponent {\r\n\r\n @Input()\r\n public progress: number;\r\n\r\n}\r\n","import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter } from '@angular/core';\r\nimport { OwlDateTimeModule, OwlNativeDateTimeModule } from 'nshviewer-angular-datetime-picker';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'time-range-selector',\r\n template: `\r\n <div class=\"time-range\">\r\n <div class=\"time-range-from\">\r\n <input placeholder=\"Date Time Range From:\"\r\n [disabled]=\"disabled\"\r\n [(ngModel)]=\"dateTimeRange\"\r\n [selectMode]=\"'rangeFrom'\"\r\n [owlDateTimeTrigger]=\"dtRange2\" [owlDateTime]=\"dtRange2\" #dateTime2=\"ngModel\" readonly>\r\n <owl-date-time #dtRange2 (afterPickerClosed)=\"afterPickerClosed()\"></owl-date-time>\r\n </div>\r\n <div class=\"time-range-to\">\r\n <input placeholder=\"Date Time Range To:\"\r\n [disabled]=\"disabled\"\r\n [(ngModel)]=\"dateTimeRange\"\r\n [selectMode]=\"'rangeTo'\"\r\n [owlDateTimeTrigger]=\"dtRange3\" [owlDateTime]=\"dtRange3\" #dateTime3=\"ngModel\" readonly>\r\n <owl-date-time #dtRange3 (afterPickerClosed)=\"afterPickerClosed()\"></owl-date-time>\r\n </div>\r\n </div>\r\n `,\r\n styleUrls: [ './time-range-selector.component.scss' ],\r\n standalone: true,\r\n imports: [ CommonModule, FormsModule, OwlDateTimeModule, OwlNativeDateTimeModule ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TimeRangeSelectorComponent {\r\n\r\n @Input() disabled = false;\r\n /**\r\n * selected time range\r\n */\r\n @Input() dateTimeRange: Date[];\r\n /**\r\n * for two way binding.\r\n */\r\n @Output() dateTimeRangeChange = new EventEmitter<Date[]>();\r\n\r\n /**\r\n * triggered when picker closed\r\n */\r\n afterPickerClosed() {\r\n this.dateTimeRangeChange.emit(this.dateTimeRange);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { defaultTimezone, supportedTimezones, getOffset } from '../../utils';\r\n\r\n\r\nexport interface Timezone {\r\n region: string;\r\n zones: string[];\r\n}\r\n\r\n@Injectable()\r\nexport class TimezoneSelectorService {\r\n\r\n /**\r\n * get the default timezone\r\n */\r\n get defaultTimezone(): string {\r\n return defaultTimezone();\r\n }\r\n\r\n /**\r\n * Get all the timezones for each region\r\n */\r\n getZones(): Timezone[] {\r\n const timezones: Timezone[] = [];\r\n const zones = supportedTimezones();\r\n \r\n zones.forEach(zone => {\r\n // get region\r\n let region;\r\n if (zone.indexOf('/') > 0) {\r\n region = zone.slice(0, zone.indexOf('/'));\r\n this._buildTimezones(timezones, region, zone);\r\n }\r\n });\r\n return timezones;\r\n }\r\n\r\n getFormattedZone(region, zone) {\r\n return `${region} - ${this._formatTimezone(zone)} ${this._getOffset(zone)}`;\r\n }\r\n\r\n private _getOffset(zone: string): string {\r\n const offsetMinutes = getOffset(zone, Date.now()) / 60;\r\n const absOffset = Math.abs(offsetMinutes);\r\n const hours = Math.floor(absOffset / 60);\r\n const minutes = absOffset % 60;\r\n \r\n return `(GMT${offsetMinutes < 0 ? '-' : '+'}${this._formatNumber(hours)}:${this._formatNumber(minutes)})`;\r\n }\r\n\r\n /**\r\n * build timezone lists\r\n */\r\n private _buildTimezones(timezones: Timezone[], region: string, zone: string): void {\r\n if (timezones) {\r\n let timezoneRegion = timezones.find(tz => tz.region === region);\r\n if (!timezoneRegion) {\r\n timezoneRegion = {region: region, zones: []};\r\n timezones.push(timezoneRegion);\r\n }\r\n timezoneRegion.zones.push(zone);\r\n }\r\n }\r\n\r\n private _formatTimezone(zone: string): string {\r\n const tz = zone.split('/');\r\n return tz[tz.length - 1].replace('_', ' ');\r\n }\r\n\r\n private _formatNumber(number): string {\r\n return number < 10 || !number ? `0${number}` : `${number}`;\r\n }\r\n}\r\n","import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { TimezoneSelectorService } from './timezone-selector.service';\r\nimport { DropdownListComponent } from 'ngx-dropdown-list';\r\n\r\n\r\n@Component({\r\n selector: 'timezone-selector',\r\n template: `\r\n <ngx-dropdown-list (selectionChange)=\"onChange($event)\"\r\n [items]=\"timezones\"\r\n [multiSelection]=\"false\"\r\n [placeHolder]=\"'Timezones'\"\r\n [(selectedValue)]=\"timezone\"\r\n [filterBox]=\"true\"\r\n [disabled]=\"disabled\"\r\n [allowClear]=\"false\">\r\n </ngx-dropdown-list>\r\n `,\r\n providers: [ TimezoneSelectorService ],\r\n imports: [ DropdownListComponent ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TimezoneSelectorComponent implements OnChanges {\r\n\r\n @Input() disabled = false;\r\n @Input() timezone: string;\r\n @Output() timezoneChange = new EventEmitter<string>();\r\n\r\n /**\r\n * all time zones for each region\r\n */\r\n timezones: any[];\r\n\r\n constructor(private service: TimezoneSelectorService) {\r\n const defaultTZ = this.service.defaultTimezone;\r\n this.timezones = this.service.getZones().map(tz => ({group: tz.region, items: tz.zones.map(zone =>\r\n ({id: zone, value: zone, text: this.service.getFormattedZone(tz.region, zone), selected: zone === defaultTZ}))}));\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['timezone'] && changes['timezone'].currentValue) {\r\n if (this.timezones) {\r\n this.timezones = this.service.getZones().map(tz => ({group: tz.region, items: tz.zones.map(zone =>\r\n ({id: zone, value: zone, text: this.service.getFormattedZone(tz.region, zone), selected: zone === changes['timezone'].currentValue}))}));\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * onChange function called by the \"ngx-select\" element\r\n * @param selectedTimezone The timezone string selected\r\n */\r\n onChange(selectedTimezone: string) {\r\n this.timezone = selectedTimezone;\r\n this.timezoneChange.emit(this.timezone);\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'alert',\r\n templateUrl: './alert.component.html',\r\n styleUrls: ['./alert.component.scss'],\r\n standalone: true,\r\n imports: [CommonModule]\r\n})\r\n\r\nexport class AlertComponent implements OnChanges {\r\n @Input() alertMessage: string;\r\n @Input() alertType: string;\r\n @Input() alertTimeout: number;\r\n @Output() alertMessageChange = new EventEmitter<string>();\r\n\r\n message: string;\r\n private _timeout: any;\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['alertMessage']) {\r\n this._setMessage(changes['alertMessage'].currentValue);\r\n }\r\n }\r\n\r\n private _setMessage(msgString: string) {\r\n this.message = void 0;\r\n if (msgString && msgString.length > 0) {\r\n this._showMessage(msgString);\r\n this._setTimeout();\r\n }\r\n }\r\n\r\n private _showMessage(msgString: string) {\r\n setTimeout(() => this.message = msgString, 100);\r\n }\r\n\r\n private _setTimeout() {\r\n if (this.alertTimeout > 0) {\r\n // clear time out first, it doesn't matter whether the _timeout is undefined or not.\r\n clearTimeout(this._timeout);\r\n this._timeout = setTimeout(() => this.clearAlert(), this.alertTimeout);\r\n }\r\n }\r\n\r\n clearAlert() {\r\n this.alertMessage = void 0;\r\n this.alertType = void 0;\r\n this.alertMessageChange.emit(this.alertMessage);\r\n clearTimeout(this._timeout);\r\n }\r\n\r\n /**\r\n * get css class base on the alert type\r\n */\r\n get alertClassType(): string {\r\n if (this.alertType) {\r\n switch (this.alertType.toLowerCase()) {\r\n case 'success':\r\n return 'alert-success';\r\n case 'error':\r\n return 'alert-error';\r\n case 'info':\r\n return 'alert-info';\r\n case 'warning':\r\n return 'alert-warning';\r\n default:\r\n return '';\r\n }\r\n }\r\n return '';\r\n }\r\n}\r\n","<div class=\"alert-container\" *ngIf=\"message\">\r\n <div [ngClass]=\"alertClassType\">\r\n {{message}}\r\n <a class=\"close\" (click)=\"clearAlert()\">×</a>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n\r\n","import {AfterViewInit, Component, ElementRef, Input, Output, OnChanges, EventEmitter, SimpleChanges, ViewChild} from '@angular/core';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport {\r\n setChartHeight,\r\n sleep,\r\n isEmptyData,\r\n getDisplayPort,\r\n getFileFromInput,\r\n isSameFile,\r\n getAbbreviatedFileName,\r\n getFileFromDrop,\r\n getRealPorts,\r\n getTimeString,\r\n printProcessedTime,\r\n getTimeRangeString,\r\n generatePorts,\r\n defaultTimezone,\r\n blobToFile,\r\n isFile,\r\n getHANAServiceDisplayName\r\n} from '../utils';\r\nimport { Abort, Alert, HtmlElement, Item, ChartContentData, ChartContentHeader, ChartContentTime, Port } from '../types';\r\nimport { FileService, ChartService, UIService } from '../services';\r\nimport { OwlDateTimeModule, OwlNativeDateTimeModule } from 'nshviewer-angular-datetime-picker';\r\nimport { SelectionTableComponent } from 'ngx-selection-table';\r\nimport { FileDropInputComponent } from './file-drop-input';\r\nimport { InstructionComponent } from './instruction';\r\nimport { PortSelectorComponent } from './port-selector';\r\nimport { ProgressBarComponent } from './progress-bar';\r\nimport { TimeRangeSelectorComponent } from './time-range-selector';\r\nimport { TimezoneSelectorComponent } from './timezone-selector';\r\nimport { AlertComponent } from './alert';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nenum SearchType {\r\n searchWithSubHeader = 'searchWithSubHeader',\r\n searchAll = 'searchAll',\r\n searchInChildren = 'searchInChildren'\r\n}\r\n\r\n@Component({\r\n selector: 'ngx-hana-nameserver-history-viewer',\r\n templateUrl: './nameserver-history.component.html',\r\n styleUrls: [ './nameserver-history.component.scss' ],\r\n providers: [ FileService, ChartService, UIService ],\r\n standalone: true,\r\n imports: [ CommonModule, AlertComponent, TimezoneSelectorComponent, TimeRangeSelectorComponent, ProgressBarComponent, PortSelectorComponent, InstructionComponent, FileDropInputComponent, SelectionTableComponent, OwlDateTimeModule, OwlNativeDateTimeModule ]\r\n})\r\nexport class NameServerHistoryComponent implements OnChanges, AfterViewInit {\r\n @ViewChild('nameserverHistoryAll', { read: ElementRef }) nameserverHistoryAllRef: ElementRef;\r\n @ViewChild('nameserverHistoryContent', { read: ElementRef }) nameserverHistoryContentRef: ElementRef;\r\n\r\n /**\r\n * Input (optional) bind to [defaultSelectedItems]\r\n */\r\n @Input() defaultSelectedItems: string[];\r\n\r\n /**\r\n * Input (optional) bind to [hideMeasureColumns]\r\n */\r\n @Input() hideMeasureColumns: string[];\r\n\r\n /**\r\n * Input (optional) bind to [maxRowsLimitation]\r\n */\r\n @Input() maxRowsLimitation: number;\r\n\r\n /**\r\n * Input (optional) bind to [showInstruction]\r\n */\r\n @Input() showInstruction = true;\r\n\r\n /**\r\n * Input (optional) bind to [timezone]\r\n */\r\n @Input() timezone: string;\r\n\r\n /**\r\n * file buffer, use this for stream mode\r\n */\r\n @Input() fileBuffer: Blob;\r\n\r\n /**\r\n * file name for stream mode\r\n */\r\n @Input() streamModeFileName: string;\r\n\r\n /**\r\n * auto display the chart in stream mode\r\n */\r\n @Input() autoDisplay: boolean;\r\n\r\n /**\r\n * service port info\r\n */\r\n @Input() servicePortInfo: any;\r\n\r\n /**\r\n * update timezone value\r\n */\r\n @Output() timezoneChange = new EventEmitter<string>();\r\n\r\n\r\n /**\r\n * selected name server history file\r\n */\r\n file: File;\r\n\r\n /**\r\n * time info of the name server history file\r\n */\r\n time: ChartContentTime = {};\r\n\r\n /**\r\n * data of the name server history file\r\n */\r\n data: ChartContentData = {};\r\n\r\n /**\r\n * header of the name server history file\r\n */\r\n header: ChartContentHeader[] = [];\r\n\r\n /**\r\n * host of the name server history file\r\n */\r\n host = 'nameserver history file';\r\n\r\n /**\r\n * alert message content\r\n */\r\n alertMessage: string;\r\n\r\n /**\r\n * alert message type\r\n */\r\n alertType: Alert;\r\n\r\n /**\r\n * selected port\r\n */\r\n port: string;\r\n\r\n /**\r\n * all the ports from the nameserver history file\r\n */\r\n ports: Port[];\r\n\r\n /**\r\n * selected time range\r\n */\r\n dateTimeRange: Date[];\r\n\r\n /**\r\n * data source for the selection table (right part of the chart)\r\n */\r\n tableSource: any[];\r\n\r\n /**\r\n * the progress for reading file\r\n */\r\n readProgress = 0;\r\n\r\n /**\r\n * selected/dropped file name (abbreviation), full file name will be shown via the tooltips\r\n */\r\n abbreviatedFileName = 'or Drop File Here';\r\n\r\n /**\r\n * for the instruction step 4\r\n */\r\n stepShowChart = false;\r\n\r\n /**\r\n * control flag for showing the name server history chart\r\n */\r\n showChartFlag: boolean;\r\n\r\n /**\r\n * control flag for showing the file reading progress\r\n */\r\n showReadFileProgress: boolean;\r\n\r\n /**\r\n * control flag for \"Load\" ports button\r\n */\r\n enableLoadPortsButton: boolean;\r\n\r\n /**\r\n * control flag for enabling \"Show\" chart button\r\n */\r\n enableShowChartButton: boolean;\r\n\r\n /**\r\n * control flag for \"Reset\" chart button\r\n */\r\n enableResetChartButton: boolean;\r\n\r\n searchType = SearchType.searchAll;\r\n\r\n /**\r\n * selection information for the selection table\r\n */\r\n private _selection: SelectionModel<any>;\r\n\r\n /**\r\n * current displaying port\r\n */\r\n private _currentChartPort: string;\r\n\r\n constructor(private fileService: FileService,\r\n private chartService: ChartService,\r\n private uiService: UIService) {}\r\n\r\n async ngOnChanges(changes: SimpleChanges) {\r\n const fbc = changes['fileBuffer'];\r\n // !isFile(fbc.currentValue) --> only show chart when it's not a file -> it's a file, means the object has already been processed\r\n if (fbc && fbc.currentValue && fbc.currentValue !== fbc.previousValue && !isFile(fbc.currentValue)) {\r\n // simulate selecting file\r\n const simulatedEvent = {target: {files: [blobToFile(fbc.currentValue, this.streamModeFileName)]}};\r\n await this.fileSelected(simulatedEvent);\r\n this.port = undefined; // clear the port selection\r\n if (this.autoDisplay) {\r\n this.onResize(); // ngAfterViewInit/resize won't work in electron\r\n this.showChart();\r\n }\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n // init items' status\r\n // reset chart button will be disable by default later, only be enabled after zoomed\r\n this._toggleItems([\r\n {id: HtmlElement.chartArea, status: false},\r\n {id: HtmlElement.readFileProgress, status: false},\r\n {id: HtmlElement.showChartButton, status: false},\r\n {id: HtmlElement.loadPortsButton, status: true},\r\n {id: HtmlElement.resetChartButton, status: false}]);\r\n this.onResize(); // update the size, otherwise there may have a scrollbar (because of the toast) if auto display is set to true\r\n }\r\n\r\n /**\r\n * Reset Chart to initial status\r\n * If legend is already selected/unselected from the list, it wouldn't be restored.\r\n */\r\n resetChart(): void {\r\n this._toggleItems([{id: HtmlElement.resetChartButton, status: false}]);\r\n\r\n if (this.tableSource && this._selection) {\r\n this.chartService.resetChart(this.tableSource, this._selection)\r\n .catch(e => this._showMessage(Alert.error, e));\r\n }\r\n }\r\n\r\n /**\r\n * read the file and display the chart\r\n */\r\n showChart(): void {\r\n // after click, this button and reset button needs to be disabled\r\n this._toggleItems([\r\n {id: HtmlElement.resetChartButton, status: false},\r\n {id: HtmlElement.showChartButton, status: false}]);\r\n\r\n this.stepShowChart = true;\r\n\r\n this._initChartEnv().then(() => {\r\n const selectedTime = this._selectedTimeRange;\r\n if (selectedTime.startTime > selectedTime.endTime) {\r\n this._showMessage(Alert.error, 'Time range is not correct.');\r\n return Promise.resolve();\r\n }\r\n if (this.file) {\r\n // it's time for displaying the reading progress bar\r\n this._toggleItems([{id: HtmlElement.readFileProgress, status: true}]);\r\n return this._buildChartFromDataFile(this.file, selectedTime.startTime, selectedTime.endTime, this.port);\r\n }\r\n return Promise.resolve();\r\n }).catch(e => {\r\n this._showMessage(Alert.error, e);\r\n this._toggleItems([{id: HtmlElement.readFileProgress, status: false}]);\r\n });\r\n }\r\n\r\n /**\r\n * load all ports from file\r\n */\r\n loadPorts(): void {\r\n // do confirmation actions\r\n if (this.file) {\r\n // before start loading ports from file, display progress bar and disable the show chart button\r\n this._toggleItems([\r\n {id: HtmlElement.readFileProgress, status: true},\r\n {id: HtmlElement.showChartButton, status: false}\r\n ]);\r\n this._readPortsFromFile(this.file);\r\n }\r\n }\r\n\r\n /**\r\n * select name server history file, currently only supports 1 file.\r\n */\r\n async fileSelected(event: any) {\r\n const selectedFile = getFileFromInput(event.target);\r\n if (selectedFile) {\r\n if (!isSameFile(this.file, selectedFile)) {\r\n // init port selector\r\n await this._initPortSelector().catch(e => this._showMessage(Alert.error, e));\r\n\r\n this.file = selectedFile;\r\n this.abbreviatedFileName = getAbbreviatedFileName(this.file.name);\r\n // after file has been selected, the show chart button needs to be enabled\r\n this._toggleItems([{id: HtmlElement.showChartButton, status: true}]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * drop name server history file, currently only supports 1 file.\r\n */\r\n fileDropped(event: any) {\r\n getFileFromDrop(event)\r\n .then(file => {\r\n if (!isSameFile(this.file, file)) {\r\n // init port selector\r\n this.file = file;\r\n if (this.file) {\r\n this.abbreviatedFileName = getAbbreviatedFileName(this.file.name);\r\n // after file has been dropped, the show chart button needs to be enabled\r\n this._toggleItems([{id: HtmlElement.showChartButton, status: true}]);\r\n }\r\n }})\r\n .then(() => {\r\n return this._initPortSelector();\r\n })\r\n .catch(e => this._showMessage(Alert.error, e));\r\n }\r\n\r\n /**\r\n * Select one item from selection table, relative dataset will be shown or hidden\r\n */\r\n selectItem(event: any) {\r\n if (event && event.tableRow) {\r\n const row = event.tableRow;\r\n this._selection.toggle(row);\r\n this.chartService.toggleDataInChart(row.KPI, !this._selection.isSelected(row))\r\n .catch(e => this._showMessage(Alert.error, e));\r\n }\r\n }\r\n\r\n /**\r\n * recalculating chart height when resizing\r\n */\r\n onResize() {\r\n const nameserverHistoryAllElement = this.nameserverHistoryAllRef ? this.nameserverHistoryAllRef.nativeElement : null;\r\n const nameserverHistoryContentElement = this.nameserverHistoryContentRef ? this.nameserverHistoryContentRef.nativeElement : null;\r\n setChartHeight(nameserverHistoryAllElement, nameserverHistoryContentElement);\r\n }\r\n\r\n /**\r\n * Handle timezone change from timezone-selector\r\n * @param newTimezone the new timezone value\r\n */\r\n onTimezoneChange(newTimezone: string): void {\r\n this.timezone = newTimezone;\r\n this.timezoneChange.emit(newTimezone);\r\n }\r\n\r\n /**\r\n * Switch port and reinitialize chart, triggered by changing the port\r\n * @param port the selected port\r\n */\r\n switchPortForChart(port: string): void {\r\n if (port === this._currentChartPort) {\r\n // not to switch port, because the relative port is displaying, no need to render twice.\r\n return;\r\n }\r\n if (!this.file || !port || port.length === 0 || port.slice(1, 3) === '**') {\r\n return;\r\n } else if (Object.keys(this.time).length > 1 && !getRealPorts(Object.keys(this.time).filter(key => this.time[key])).includes(port)) {\r\n this._showMessage(Alert.info, `Data of port:${port} is not loaded, please load the data first by clicking the \"Show\" button.`);\r\n return;\r\n }\r\n\r\n // only do switch ports when available ports number > 1\r\n if (Object.keys(this.time).filter(key => this.time[key]).length > 1) {\r\n // disable the \"show chart\" and \"reset chart\" button first\r\n this._toggleItems([\r\n {id: HtmlElement.showChartButton, status: false},\r\n {id: HtmlElement.resetChartButton, status: false}]);\r\n // init the environment with switch flag\r\n this._initChartEnv(true).then(() => {\r\n return this._buildChart(port, null, this.servicePortInfo?.[this.host]?.[port], true);\r\n }).catch(e => this._showMessage(Alert.error, e));\r\n }\r\n }\r\n\r\n /**\r\n * get the columns which need to be hidden from the selection table\r\n */\r\n get hiddenColumns(): string[] {\r\n return this.uiService.getHiddenColumns(this.hideMeasureColumns);\r\n }\r\n\r\n /**\r\n * get default timezone\r\n */\r\n get defaultTimezone(): string {\r\n return defaultTimezone();\r\n }\r\n\r\n /**\r\n * get the key column (KPI)\r\n */\r\n get kpiColumn(): Item {\r\n return Item.kpi;\r\n }\r\n\r\n /**\r\n * get the key column (KPI)\r\n */\r\n get descColumn(): Item {\r\n return Item.description;\r\n }\r\n\r\n /**\r\n * get the selected time range, set second and millisecond part to 0\r\n */\r\n private get _selectedTimeRange(): {startTime: number, endTime: number} {\r\n let startTime = 0;\r\n let endTime = 4102358400000; // 2099/12/31\r\n if (this.dateTimeRange != null) {\r\n if (this.dateTimeRange.length >= 1) {\r\n // get start time\r\n if (this.dateTimeRange[0]) {\r\n startTime = this.dateTimeRange[0].setSeconds(0, 0);\r\n }\r\n if (this.dateTimeRange[1]) {\r\n endTime = this.dateTimeRange[1].setSeconds(0, 0);\r\n }\r\n }\r\n }\r\n return {startTime: startTime, endTime: endTime};\r\n }\r\n\r\n /**\r\n * get the time range string, eg: 2018-10-25 10:25 ~ 2018-10-26 10:26\r\n */\r\n private get _selectedTimeRangeString(): string {\r\n const selectedTimeRangeString = this._selectedTimeRange;\r\n return `${getTimeString(selectedTimeRangeString.startTime)} ~ ${getTimeString(selectedTimeRangeString.endTime)}`;\r\n }\r\n\r\n /**\r\n * get array of header key\r\n */\r\n private get _headerKey(): string[] {\r\n if (this.header) {\r\n return this.header.map(headerItem => headerItem.key);\r\n }\r\n return [];\r\n }\r\n\r\n /**\r\n * get array of header text\r\n */\r\n private get _headerText(): string[] {\r\n return this.header.map(headerItem => headerItem.text);\r\n }\r\n\r\n /**\r\n * read ports from the selected nameserver history file\r\n * @param file nameserver history file\r\n */\r\n private _readPortsFromFile(file: File): void {\r\n this.fileService.getPortsFromFile(file, (progress) => {\r\n this.readProgress = progress;\r\n }).then(ports => {\r\n return sleep(100).then(() => {\r\n return this._initPortSelector(ports);\r\n });\r\n }).catch(e => this._showMessage(Alert.error, e));\r\n }\r\n\r\n /**\r\n * build chart from the selected nameserver history file\r\n * @param file the nameserver history file\r\n * @param startTime start time\r\n * @param endTime end time\r\n * @param selectedPort selected port for nameserver history file (MDC system)\r\n */\r\n private _buildChartFromDataFile(file: File, startTime: number, endTime: number, selectedPort: string): Promise<any> {\r\n return this.fileService.getChartContentFromFile(\r\n file,\r\n startTime,\r\n endTime,\r\n selectedPort,\r\n this.timezone,\r\n this.maxRowsLimitation, progress => this.readProgress = progress)\r\n .then(result => {\r\n // parsing done\r\n const beginTime = new Date();\r\n const promises = [];\r\n const ports = getRealPorts(Object.keys(result.time), true);\r\n ports.forEach(port => {\r\n // convert the unit and generate controlling data for all ports\r\n promises.push(this.uiService.convertUnitAndGenerateControlData(result.data[port], result.header, port));\r\n });\r\n\r\n return Promise.all(promises)\r\n .then(() => {\r\n\r\n // get all ports from the analyzed data(time)\r\n // get the port that will be shown in the page\r\n const port = getDisplayPort(ports, selectedPort);\r\n\r\n printProcessedTime(beginTime, 'converting step');\r\n ports.forEach( portItem => this.uiService.generateYScale(portItem));\r\n printProcessedTime(beginTime, 'generating YScale step');\r\n this.data = result.data;\r\n this.time = result.time;\r\n this.header = this.uiService.getHeader(result.header, port);\r\n this.host = result.host;\r\n if (result.aborted === Abort.maxLineNumReached) {\r\n this._showMessage(\r\n Alert.warning, `Maximum number of lines reached. Processed time range is: ${getTimeRangeString(this.time)}.`);\r\n } else {\r\n if (isEmptyData(this.data)) {\r\n this._showMessage(Alert.info, `Cannot find any data for the selected time period: ${this._selectedTimeRangeString}`);\r\n } else {\r\n this._showMessage(Alert.success, `Processed time range is: ${getTimeRangeString(this.time)}.`);\r\n }\r\n }\r\n return sleep(100).then(() => {\r\n return this._buildChart(port, ports, this.servicePortInfo?.[this.host]?.[port]);\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * reinitialize the port selector with the ports\r\n */\r\n private _initPortSelector(ports: string[] = null, selectedPort: string = null): Promise<void> {\r\n return new Promise(resolve => {\r\n // initialization for ngx-select\r\n if (ports != null && ports.length > 1) {\r\n // MDC, remove default '0000' port\r\n this.ports = generatePorts(getRealPorts(ports), selectedPort);\r\n } else {\r\n this.ports = generatePorts(ports);\r\n }\r\n\r\n if (ports != null && selectedPort === null) {\r\n // reset status when doing:\r\n // 1. loading ports\r\n // 2. the file doesn't contain the selected Port\r\n this.readProgress = 0;\r\n // hide the progress bar and enable the \"show chart\" button\r\n this._toggleItems([\r\n {id: HtmlElement.readFileProgress, status: false},\r\n {id: HtmlElement.showChartButton, status: true}\r\n ]);\r\n }\r\n resolve();\r\n });\r\n }\r\n\r\n /**\r\n * build and display the chart on page\r\n * @param port the selected port\r\n * @param ports all available ports\r\n * @param service service name\r\n * @param switchFlag indicates whether this function is triggered from switching ports (no init port selector needed)\r\n */\r\n private _buildChart(port: string, ports: string[], service: string, switchFlag = false): Promise<any> {\r\n const beginTime = new Date();\r\n if (port) {\r\n return Promise.resolve(this._loadSettingsForSelectionsTable(port, service))\r\n .then( () => {\r\n // get the config\r\n return this.chartService.buildChart(\r\n this.time[port],\r\n this.data[port],\r\n this.uiService.getYScale(this._headerKey, port),\r\n this._headerText,\r\n this._headerKey,\r\n this._selection,\r\n this.tableSource,\r\n this._getHostTitle(port),\r\n this.uiService.getDisplayItems(this._headerKey, port, this.defaultSelectedItems),\r\n this._onZoom.bind(this))\r\n .then(() => {\r\n this.readProgress = 0;\r\n // after chart has been created, show the chart area, hide progress bar and enable the \"show chart\" button\r\n this._toggleItems([\r\n {id: HtmlElement.chartArea, status: true},\r\n {id: HtmlElement.readFileProgress, status: false},\r\n {id: HtmlElement.showChartButton, status: true}\r\n ]);\r\n // set port to current displaying port\r\n this._currentChartPort = port;\r\n printProcessedTime(beginTime, 'step_build_chart');\r\n if (ports && ports.length > 0) {\r\n if (!switchFlag) {\r\n // initialize port selector. Do not need to do it when switching port.\r\n return this._initPortSelector(ports, port);\r\n }\r\n }\r\n return Promise.resolve();\r\n });\r\n });\r\n } else {\r\n if (ports && ports.length > 0) {\r\n this._showMessage(\r\n Alert.warning,\r\n 'The selected port does not exist in the name server history file. Please choose a correct port and have a try again.');\r\n if (!switchFlag) {\r\n // initialize port selector. Do not need to do it when switching port.\r\n return this._initPortSelector(ports, port);\r\n }\r\n }\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * get the string that will be displayed on the title area of the chart\r\n * eg: host1 - 30040 (2018-09-05 15:32:32 ~ 2018-09-07 15:32:15)\r\n * @param port selected port\r\n */\r\n private _getHostTitle(port: string): string {\r\n if (this.host) {\r\n return `${this.host} - ${port} ( ${getTimeRangeString(this.time[port])} )`;\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * after zoom, enable the reset button.\r\n */\r\n private _onZoom(): void {\r\n this._toggleItems([{id: HtmlElement.resetChartButton, status: true}]);\r\n }\r\n\r\n /**\r\n * initialize chart, including: destroy current chart, initialize config, initialize all relative data\r\n */\r\n private _initChartEnv(switchFlag: boolean = false): Promise<any> {\r\n return this.chartService.destroyChart().then(() => {\r\n {\r\n // cleanup other data\r\n this._toggleItems([{id: HtmlElement.chartArea, status: false}]);\r\n\r\n if (!switchFlag) {\r\n Object.keys(this.time).forEach(key => {\r\n if (this.time[key]) {\r\n this.time[key].length = 0;\r\n }});\r\n this.time = {};\r\n Object.keys(this.data).forEach(key => {\r\n if (this.data[key]) {\r\n this.data[key].length = 0;\r\n }});\r\n this.data = {};\r\n this.header.length = 0;\r\n this.host = 'nameserver history file';\r\n this.tableSource = void 0;\r\n this.readProgress = 0;\r\n this.uiService.clearLoadHistoryInfos();\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Load settings for the selection table (the right part of the chart)\r\n * @param port the selected port\r\n */\r\n private _loadSettingsForSelectionsTable(port: string, service: string): void {\r\n this.tableSource = this.uiService.getSelectionTableRows(this._headerKey, port, this.defaultSelectedItems);\r\n this._updateServiceHeader(port, service);\r\n this._selection = new SelectionModel(true, []);\r\n this.tableSource.forEach(row => {\r\n if (this.uiService.getDisplayItems(this._headerKey, port, this.defaultSelectedItems).includes(row.KPI)) {\r\n this._selection.select(row);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Replace confusing service type, issue: https://github.com/ckyycc/ngx-hana-nameserver-history-viewer/issues/14\r\n * by default will replaced it with Service (port), eg: Service (30015)\r\n *if topology is imported, it will be: Name Server (30001) or Index Server (30040), and so on...\r\n */\r\n private _updateServiceHeader(port: string, service: string) {\r\n const serviceHeader = this.tableSource.find(ts=> ts[this.kpiColumn] === 'Service' && ts.header);\r\n if (serviceHeader) {\r\n serviceHeader[this.kpiColumn] = `${getHANAServiceDisplayName(service) || 'Service'} (${port})`;\r\n }\r\n }\r\n\r\n /**\r\n * Show messages\r\n * @param type type of the message\r\n * @param message message text\r\n */\r\n private _showMessage(type: Alert, message: string): void {\r\n if (type) {\r\n switch (type) {\r\n case Alert.success:\r\n case Alert.info:\r\n break;\r\n case Alert.warning:\r\n console.warn(message);\r\n break;\r\n case Alert.error:\r\n console.error(message);\r\n }\r\n }\r\n if (this.alertMessage === message) {\r\n // try trigger the change event of the alert.\r\n this.alertMessage = void 0;\r\n setTimeout(() => this.alertMessage = message, 100);\r\n } else {\r\n this.alertMessage = message;\r\n }\r\n this.alertType = type;\r\n }\r\n\r\n /**\r\n * toggle items with the provided status (show or hide the relative element on the page)\r\n * @param items items with the relative id and status.\r\n */\r\n private _toggleItems(items: {id: HtmlElement, status: boolean}[]) {\r\n const getVariableNameByTypeId = (id: HtmlElement) => {\r\n switch (id) {\r\n case HtmlElement.chartArea: return 'showChartFlag';\r\n case HtmlElement.readFileProgress: return 'showReadFileProgress';\r\n case HtmlElement.showChartButton: return 'enableShowChartButton';\r\n case HtmlElement.loadPortsButton: return 'enableLoadPortsButton';\r\n case HtmlElement.resetChartButton: return 'enableResetChartButton';\r\n }\r\n };\r\n if (items) {\r\n items.forEach(item => {\r\n this[getVariableNameByTypeId(item.id)] = item.status;\r\n });\r\n }\r\n }\r\n}\r\n","<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\" class=\"box-stream-mode-text\">{{streamModeFileName || 'nameserver_history.trc (stream mode)'}}</p>\r\n </div>\r\n <div *ngIf=\"showReadFileProgress\">\r\n <progress-bar [progress]=\"readProgress\"></progress-bar>\r\n </div>\r\n </div>\r\n <div class=\"input-time\">\r\n <div class=\"input-time-range\">\r\n <time-range-selector [disabled]=\"showReadFileProgress\" [(dateTimeRange)]=\"dateTimeRange\"></time-range-selector>\r\n </div>\r\n <div class=\"timezone-selector\">\r\n <timezone-selector [(timezone)]=\"timezone\" (timezoneChange)=\"onTimezoneChange($event)\" [disabled]=\"showReadFileProgress\"></timezone-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"port-selection\">\r\n <div class=\"port-selector\">\r\n <port-selector (portChange)=\"switchPortForChart($event)\" [(port)]=\"port\" [ports]=\"ports\" [disabled]=\"showReadFileProgress\"></port-selector>\r\n </div>\r\n <div class=\"port-load-button\">\r\n <button (click)=\"loadPorts()\" title=\"Load all ports from name server history trace file.\" [disabled]=\"!enableShowChartButton || port || !enableLoadPortsButton\">{{showReadFileProgress? \"Loading...\" : \"Load\"}}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chart-operation\">\r\n <div class=\"left\">\r\n <button (click)=\"showChart()\" title=\"Load and display all data from name server history trace file.\" [disabled]=\"!enableShowChartButton\">{{showReadFileProgress? \"Loading...\" : \"Show\"}}</button>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"resetChart()\" title=\"Reset zoom of chart.\" [disabled]=\"showReadFileProgress || !enableResetChartButton\">Reset Chart</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div #nameserverHistoryContent class=\"nameserver-history-content\">\r\n <div class=\"nameserver-history-content-chart\">\r\n <instruction [(show)]=\"showInstruction\" *ngIf=\"!showChartFlag && showInstruction\"\r\n [step1Finished]=\"!!file\"\r\n [step2Finished]=\"dateTimeRange && (!!dateTimeRange[0] || !!dateTimeRange[1]) || timezone != defaultTimezone\"\r\n [step3Finished]=\"!!port\"\r\n [step4Finished]=\"stepShowChart && !enableShowChartButton\"\r\n [step5Finished]=\"false\">\r\n </instruction>\r\n <canvas id=\"chartNameServerHistory\" ></canvas>\r\n </div>\r\n <div class=\"nameserver-history-content-controller\" >\r\n <ngx-selection-table (change)=\"selectItem($event)\" *ngIf=\"showChartFlag\"\r\n [filter]=\"true\"\r\n [checkbox]=\"true\"\r\n [tableSource]=\"tableSource\"\r\n [keyColumn]=\"kpiColumn\"\r\n [hiddenColumns]=\"hiddenColumns\"\r\n [tooltipColumn]=\"descColumn\"\r\n [searchStyle]=\"searchType\"\r\n [searchColumn]=\"kpiColumn\"\r\n [multiSelection]=\"true\">\r\n </ngx-selection-table>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"message-container\" *ngIf=\"alertMessage\">\r\n <alert [(alertMessage)]=\"alertMessage\" [alertType]=\"alertType\" [alertTimeout]=\"30000\"></alert>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PortSelectorService","i1","i1.TimezoneSelectorService","i1.FileService","i1.ChartService","i1.UIService","i2"],"mappings":"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"}
|