ngx-hana-nameserver-history-viewer 1.2.1-2.beta → 1.2.1
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/esm2020/src/nameserver-history-viewer/components/nameserver-history.component.mjs +2 -1
- package/fesm2015/ngx-hana-nameserver-history-viewer.mjs +1 -0
- package/fesm2015/ngx-hana-nameserver-history-viewer.mjs.map +1 -1
- package/fesm2020/ngx-hana-nameserver-history-viewer.mjs +1 -0
- package/fesm2020/ngx-hana-nameserver-history-viewer.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-hana-nameserver-history-viewer.mjs","sources":["../../src/nameserver-history-viewer/components/alert/alert.component.ts","../../src/nameserver-history-viewer/components/alert/alert.component.html","../../src/nameserver-history-viewer/components/alert/alert.module.ts","../../src/nameserver-history-viewer/components/file-drop-input/file-drop-input.component.ts","../../src/nameserver-history-viewer/components/progress-bar/progress-bar.component.ts","../../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/components/timezone-selector/timezone-selector.service.ts","../../src/nameserver-history-viewer/components/timezone-selector/timezone-selector.component.ts","../../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/instruction/instruction.component.ts","../../src/nameserver-history-viewer/components/instruction/instruction.component.html","../../src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.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/utils/chartjs-downsample/utils.ts","../../src/nameserver-history-viewer/utils/chartjs-downsample/data_mipmap.ts","../../src/nameserver-history-viewer/utils/chartjs-downsample/lttb_data_mipmap.ts","../../src/nameserver-history-viewer/utils/chartjs-downsample/data_culling.ts","../../src/nameserver-history-viewer/utils/chartjs-downsample/responsive_downsample_plugin.ts","../../src/nameserver-history-viewer/utils/chartjs-downsample/index.ts","../../src/nameserver-history-viewer/utils/chartjs-zoom/chart.zoom.ts","../../src/nameserver-history-viewer/components/nameserver-history.component.ts","../../src/nameserver-history-viewer/components/nameserver-history.component.html","../../src/nameserver-history-viewer/nameserver-history.module.ts","../../ngx-hana-nameserver-history-viewer.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'alert',\r\n templateUrl: './alert.component.html',\r\n styleUrls: ['./alert.component.scss'],\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;\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() {\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 }\r\n }\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 {AlertComponent} from './alert.component';\r\nimport {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\n\r\n@NgModule({\r\n declarations: [\r\n AlertComponent,\r\n ],\r\n exports: [AlertComponent],\r\n imports: [CommonModule],\r\n providers: [],\r\n bootstrap: [],\r\n})\r\nexport class AlertModule {}\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 { 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})\r\n\r\nexport class ProgressBarComponent {\r\n\r\n @Input()\r\n public progress: number;\r\n\r\n}\r\n","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}\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}\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}\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 {\r\n if (inputTarget && inputTarget.files && inputTarget.files.length >= 0) {\r\n return inputTarget.files[0];\r\n }\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 { 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\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 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 { 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\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 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 {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})\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 { Component, Input, ChangeDetectionStrategy, Output, EventEmitter } from '@angular/core';\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 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 { 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 }\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 }\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\r\n","import { Injectable } from '@angular/core';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { Chart } from 'chart.js';\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// Using dynamic flag to fix the issue of ng-packagr #696: Lambda not supported\r\n// @dynamic\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 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 && 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 && chart.options.scales && (chart.options.scales.xAxes || chart.options.scales.yAxis)) {\r\n if (chart.options.scales.xAxes) {\r\n chart.options.scales.xAxes.length = 0;\r\n chart.options.scales.xAxes = void 0;\r\n }\r\n if (chart.options.scales.yAxes) {\r\n chart.options.scales.yAxes.length = 0;\r\n chart.options.scales.yAxes = void 0;\r\n }\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[]): any {\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.25,\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 };\r\n });\r\n }\r\n private static _generateXAxes(time: number[]): any {\r\n const format = 'MMMDD HH:mm:ss';\r\n return [\r\n {\r\n type: 'time',\r\n time: {\r\n // unit: 'second',\r\n // stepSize: 1,\r\n displayFormats: {\r\n 'millisecond': format,\r\n 'second': format,\r\n 'minute': format,\r\n 'hour': 'MMMDD HH',\r\n 'day': 'MMMDD YYYY',\r\n 'week': format,\r\n 'month': format,\r\n 'quarter': format,\r\n 'year': format,\r\n },\r\n tooltipFormat: 'll HH:mm:ss',\r\n min: time[0],\r\n max: time[time.length - 1]\r\n },\r\n // scaleLabel: {\r\n // display: false,\r\n // labelString: 'Date'\r\n // },\r\n ticks: {\r\n maxRotation: 0,\r\n reverse: true\r\n }\r\n }\r\n ];\r\n }\r\n private static _generateYAxes(data: ChartContentDataItem[][], yScale: number[]): any {\r\n return data.map((item, i) => ({\r\n type: 'linear',\r\n display: false,\r\n position: 'left',\r\n id: `y-axis-${i}`,\r\n gridLines: {\r\n },\r\n ticks: {\r\n min: 0,\r\n max: yScale[i]\r\n }\r\n }));\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): any {\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 elements: {point: {radius: 0, hitRadius: 5, hoverRadius: 5}}, // set radius to 0 not to display point\r\n responsive: true,\r\n animation: {\r\n duration: 0, // general animation time\r\n },\r\n hover: {\r\n animationDuration: 0, // duration of animations when hovering an item\r\n onHover: function (e) {\r\n const point = this.getElementAtEvent(e);\r\n if (point.length) {\r\n e.target.style.cursor = 'pointer';\r\n } else {\r\n e.target.style.cursor = 'default';\r\n }\r\n }\r\n },\r\n responsiveAnimationDuration: 0, // animation duration after a resize\r\n legend: {\r\n position: 'bottom',\r\n onHover: (e) => {\r\n e.target.style.cursor = 'pointer';\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 responsiveDownsample: {\r\n enabled: true,\r\n desiredDataPointDistance: 2,\r\n minNumPoints: 200,\r\n maxNumPointsToDraw: 100\r\n },\r\n tooltips: {\r\n callbacks: {\r\n label: function(tooltipItem, chartData) {\r\n // format numbers with commas and add unit information\r\n const label = chartData.datasets[tooltipItem.datasetIndex].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(tooltipItem.yLabel)}${unit}`;\r\n } else {\r\n return getNumberWithCommas(tooltipItem.yLabel);\r\n }\r\n }\r\n }\r\n },\r\n scales: {\r\n xAxes: ChartService._generateXAxes(time),\r\n yAxes: ChartService._generateYAxes(data, yScale)\r\n },\r\n zoom: {\r\n enabled: true,\r\n drag: true,\r\n mode: 'x',\r\n onZoom: zoomCallback\r\n }\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 * 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 chart.destroy();\r\n }\r\n resolve();\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 chart.resetZoom();\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 * 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 const cfg: any = ChartService._generateChartConfig(time, data, yScale, header, headerKey, selection, tableSource, title, defaultItems, zoomCB);\r\n this._chart = new Chart(ctx, cfg);\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","/**\r\n * This plugin is adapted from: https://github.com/3dcl/chartjs-plugin-responsive-downsample\r\n * for controlling the radius of point.\r\n *\r\n * MIT License\r\n * Copyright (c) 2018 3D Content Logistics\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n * SOFTWARE.\r\n */\r\n\r\n/**\r\n * Check if a value is null or undefined\r\n */\r\nexport function isNil(value: any): value is null | undefined {\r\n return (typeof value === 'undefined') || value === null;\r\n}\r\n\r\n/**\r\n * Clamp a number to a range\r\n * @param value\r\n * @param min\r\n * @param max\r\n */\r\nexport function clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n\r\n/**\r\n * Recursively assign default values to an object if object is missing the keys.\r\n * @param object The destination object to assign default values to\r\n * @param defaults The default values for the object\r\n * @return The destination object\r\n */\r\nexport function defaultsDeep<T>(object: T, defaults: Partial<T>): T {\r\n for (const key in defaults) {\r\n if (defaults.hasOwnProperty(key)) {\r\n const value = object[key];\r\n\r\n if (typeof value === 'undefined') {\r\n object[key] = defaults[key];\r\n } else if (value !== null && typeof value === 'object') {\r\n object[key] = defaultsDeep(value, defaults[key]);\r\n }\r\n }\r\n }\r\n\r\n return object;\r\n}\r\n\r\n\r\n/**\r\n * Finds the first element in an array for that the comaperator functions returns true\r\n *\r\n * @export\r\n * @param array An array\r\n * @param compareFunction Comperator function returning true for the element seeked\r\n * @returns The found element or undefined\r\n */\r\nexport function findInArray<T>(array: Array<T>, compareFunction: (element: T) => boolean): T {\r\n if (isNil(array)) {\r\n return undefined;\r\n }\r\n for (let i = 0; i < array.length; i++) {\r\n if (compareFunction(array[i]) === true) {\r\n return array[i];\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\n\r\n/**\r\n * Finds the first index in an array for that the comaperator function for an element returns true\r\n *\r\n * @export\r\n * @param array An array of elements\r\n * @param compareFunction Comperator function returning true for the element seeked\r\n * @returns Index of the matched element or -1 if no element was found\r\n */\r\nexport function findIndexInArray<T>(array: Array<T>, compareFunction: (element: T) => boolean): number {\r\n if (isNil(array)) {\r\n return undefined;\r\n }\r\n for (let i = 0; i < array.length; i++) {\r\n if (compareFunction(array[i]) === true) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\n/**\r\n * If points number is less than minNumPoints, show radius for all points.\r\n */\r\nexport function changePointRadius(chart, options): void {\r\n if (chart && chart.data && chart.data.datasets && options) {\r\n let pointRadiusChangeFlag = false;\r\n const maxNumPointsToDraw = options.maxNumPointsToDraw == null ? 100 : options.maxNumPointsToDraw;\r\n for (const dataset of chart.data.datasets) {\r\n if (dataset.data.length < maxNumPointsToDraw) {\r\n pointRadiusChangeFlag = true;\r\n break;\r\n }\r\n }\r\n chart.options.elements.point.radius = pointRadiusChangeFlag ? 2 : 0;\r\n }\r\n}\r\n","/**\r\n * This plugin is adapted from: https://github.com/3dcl/chartjs-plugin-responsive-downsample\r\n * for controlling the radius of point.\r\n *\r\n * MIT License\r\n * Copyright (c) 2018 3D Content Logistics\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n * SOFTWARE.\r\n */\r\nimport { ChartPoint } from 'chart.js';\r\nimport * as utils from './utils';\r\n\r\n/**\r\n * A mipmap data structure for line chart data. Uses averages to downsample data.\r\n */\r\nexport class DataMipmap {\r\n protected minNumPoints: number;\r\n protected mipMaps: ChartPoint[][];\r\n protected originalData: ChartPoint[];\r\n protected resolution: number;\r\n\r\n /**\r\n * Create a data mipmap\r\n * @param data The orignal line chart data\r\n * @param minNumPoints Minimal number of points on lowest mipmap level(limits number of levels)\r\n */\r\n constructor(data: ChartPoint[], minNumPoints: number = 2) {\r\n this.minNumPoints = minNumPoints;\r\n this.setData(data);\r\n }\r\n\r\n /**\r\n * Set the line chart data and update mipmap level.\r\n * @param data The orignal line chart data\r\n */\r\n setData(data: ChartPoint[]): void {\r\n this.originalData = data || [];\r\n this.mipMaps = [];\r\n this.resolution = this.computeResolution(this.originalData);\r\n this.createMipMap();\r\n }\r\n\r\n /**\r\n * Set the minimal number of points\r\n * @param minNumPoints Minimal number of points on lowest mipmap level(limits number of levels)\r\n */\r\n setMinNumPoints(minNumPoints: number): void {\r\n this.minNumPoints = minNumPoints;\r\n this.mipMaps = [];\r\n this.createMipMap();\r\n }\r\n\r\n /**\r\n * Get the best fitting mipmap level for a certain scale resolution\r\n * @param resolution Desired resolution in ms per pixel\r\n */\r\n getMipMapForResolution(resolution: number): ChartPoint[] {\r\n return this.getMipMapLevel(this.getMipMapIndexForResolution(resolution));\r\n }\r\n\r\n /**\r\n * Computes the index of the best fitting mipmap level for a certain scale resolution\r\n * @param resolution Desired resolution in ms per pixel\r\n */\r\n getMipMapIndexForResolution(resolution: number): number {\r\n if (utils.isNil(resolution)) { return 0; }\r\n\r\n const factor = resolution / this.resolution;\r\n return utils.clamp(Math.floor(Math.log(factor) / Math.log(2.0)), 0, this.mipMaps.length - 1);\r\n }\r\n\r\n /**\r\n * Get a mipmap level by index\r\n * @param level The index of the mipmap level\r\n */\r\n getMipMapLevel(level: number): ChartPoint[] {\r\n return this.mipMaps[level];\r\n }\r\n\r\n /**\r\n * Get all mipmap level\r\n */\r\n getMipMaps(): ChartPoint[][] {\r\n return this.mipMaps;\r\n }\r\n\r\n /**\r\n * Get the number of available mipmap level\r\n */\r\n getNumLevel(): number {\r\n return this.mipMaps.length;\r\n }\r\n\r\n protected computeResolution(data: ChartPoint[]): number {\r\n let minTimeDistance = Infinity;\r\n\r\n for (let i = 0, end = this.originalData.length - 1; i < end; ++i) {\r\n const current = this.originalData[i];\r\n const next = this.originalData[i + 1];\r\n\r\n\r\n minTimeDistance = Math.min(\r\n Math.abs(this.getTime(current) - this.getTime(next)),\r\n minTimeDistance\r\n );\r\n }\r\n\r\n return minTimeDistance;\r\n }\r\n\r\n protected createMipMap(): void {\r\n let targetResolution = this.resolution;\r\n let targetLength = this.originalData.length;\r\n this.mipMaps.push(this.originalData);\r\n let lastMipMap = this.originalData;\r\n\r\n while (lastMipMap.length > this.minNumPoints) {\r\n targetResolution = targetResolution * 2;\r\n targetLength = Math.floor(targetLength * 0.5);\r\n lastMipMap = this.downsampleToResolution(lastMipMap, targetResolution, targetLength);\r\n this.mipMaps.push(lastMipMap);\r\n }\r\n }\r\n\r\n protected downsampleToResolution(\r\n data: ChartPoint[],\r\n targetResolution: number,\r\n targetLength: number\r\n ): ChartPoint[] {\r\n const output: ChartPoint[] = [];\r\n let aggregationValues: ChartPoint[] = [];\r\n let firstPoint = data[0];\r\n aggregationValues.push(firstPoint);\r\n\r\n for (let i = 1, end = data.length; i < end; ++i) {\r\n const currentPoint = data[i];\r\n const timeDistance = Math.abs(this.getTime(firstPoint) - this.getTime(currentPoint));\r\n\r\n if (timeDistance < targetResolution) {\r\n aggregationValues.push(currentPoint);\r\n } else {\r\n // create new sensor value in output\r\n const newPoint = this.getAverage(aggregationValues);\r\n output.push(newPoint);\r\n\r\n // reset aggregation data structure\r\n firstPoint = currentPoint;\r\n aggregationValues = [currentPoint];\r\n }\r\n }\r\n\r\n // insert last point\r\n output.push(this.getAverage(aggregationValues));\r\n\r\n return output;\r\n }\r\n\r\n protected getAverage(aggregationValues: ChartPoint[]): ChartPoint {\r\n const value = aggregationValues\r\n .map(point => point.y as number)\r\n .reduce((previous, current) => previous + current)\r\n / aggregationValues.length;\r\n\r\n return {\r\n x: aggregationValues[0].x || aggregationValues[0].t,\r\n y: value\r\n };\r\n }\r\n\r\n protected getTime(point: ChartPoint): number {\r\n const x = point.x || point.t;\r\n\r\n if (typeof x === 'number') {\r\n return x;\r\n } else if (typeof x === 'string') {\r\n return new Date(x).getTime();\r\n } else {\r\n return x.getTime();\r\n }\r\n }\r\n}\r\n","/**\r\n * This plugin is adapted from: https://github.com/3dcl/chartjs-plugin-responsive-downsample\r\n * for controlling the radius of point.\r\n *\r\n * MIT License\r\n * Copyright (c) 2018 3D Content Logistics\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n * SOFTWARE.\r\n */\r\nimport { ChartPoint } from 'chart.js';\r\nimport * as utils from './utils';\r\nimport { DataMipmap } from './data_mipmap';\r\n\r\n/**\r\n * A mipmap data structure that uses Largest-Triangle-Three-Buckets algorithm to downsample data\r\n */\r\nexport class LTTBDataMipmap extends DataMipmap {\r\n protected resolutions: number[];\r\n\r\n getMipMapIndexForResolution(resolution: number): number {\r\n if (utils.isNil(resolution)) { return 0; }\r\n\r\n let index = utils.findIndexInArray(this.resolutions, (levelResolution) => levelResolution >= resolution);\r\n if (index === -1) {\r\n // use smallest mipmap as fallback\r\n index = this.resolutions.length - 1;\r\n }\r\n\r\n return index;\r\n }\r\n\r\n protected createMipMap(): void {\r\n super.createMipMap();\r\n this.resolutions = this.mipMaps.map((level) => this.computeAverageResolution(level));\r\n }\r\n\r\n /**\r\n * This method is adapted from: https://github.com/sveinn-steinarsson/flot-downsample\r\n *\r\n * The MIT License\r\n * Copyright (c) 2013 by Sveinn Steinarsson\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * The above copyright notice and this permission notice shall be included in\r\n * all copies or substantial portions of the Software.\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n * THE SOFTWARE.\r\n */\r\n protected downsampleToResolution(\r\n data: ChartPoint[],\r\n targetResolution: number,\r\n targetLength: number\r\n ) {\r\n const dataLength = data.length;\r\n if (targetLength >= dataLength || targetLength === 0) {\r\n return data; // data has target size\r\n }\r\n\r\n const output: ChartPoint[] = [];\r\n\r\n // bucket size, leave room for start and end data points\r\n const bucksetSize = (dataLength - 2) / (targetLength - 2);\r\n\r\n let a = 0; // initially a is the first point in the triangle\r\n let maxAreaPoint: ChartPoint;\r\n let maxArea: number;\r\n let area: number;\r\n let nextA: number;\r\n\r\n // always add the first point\r\n output.push(data[a]);\r\n\r\n for (let i = 0; i < targetLength - 2; ++i) {\r\n // Calculate point average for next bucket (containing c)\r\n let avgX = 0;\r\n let avgY = 0;\r\n let avgRangeStart = Math.floor((i + 1) * bucksetSize) + 1;\r\n let avgRangeEnd = Math.floor((i + 2) * bucksetSize) + 1;\r\n avgRangeEnd = avgRangeEnd < dataLength ? avgRangeEnd : dataLength;\r\n\r\n const avgRangeLength = avgRangeEnd - avgRangeStart;\r\n\r\n for (; avgRangeStart < avgRangeEnd; avgRangeStart++) {\r\n avgX += this.getTime(data[avgRangeStart]);\r\n avgY += data[avgRangeStart].y as number * 1;\r\n }\r\n avgX /= avgRangeLength;\r\n avgY /= avgRangeLength;\r\n\r\n // Get the range for this bucket\r\n let rangeOffs = Math.floor((i + 0) * bucksetSize) + 1;\r\n const rangeTo = Math.floor((i + 1) * bucksetSize) + 1;\r\n\r\n // Point a\r\n const pointA = data[a];\r\n const pointAX = this.getTime(pointA);\r\n const pointAY = pointA.y as number * 1;\r\n\r\n maxArea = area = -1;\r\n\r\n for (; rangeOffs < rangeTo; rangeOffs++) {\r\n // Calculate triangle area over three buckets\r\n area = Math.abs((pointAX - avgX) * (data[rangeOffs].y as number - pointAY) -\r\n (pointAX - this.getTime(data[rangeOffs])) * (avgY - pointAY)\r\n ) * 0.5;\r\n\r\n if (area > maxArea) {\r\n maxArea = area;\r\n maxAreaPoint = data[rangeOffs];\r\n nextA = rangeOffs; // Next a is this b\r\n }\r\n }\r\n\r\n output.push(maxAreaPoint); // Pick this point from the bucket\r\n a = nextA; // This a is the next a (chosen b)\r\n }\r\n\r\n output.push(data[dataLength - 1]); // Always add last\r\n\r\n return output;\r\n }\r\n\r\n protected computeAverageResolution(data: ChartPoint[]): number {\r\n let timeDistances = 0;\r\n\r\n for (let i = 0, end = this.originalData.length - 1; i < end; ++i) {\r\n const current = this.originalData[i];\r\n const next = this.originalData[i + 1];\r\n\r\n timeDistances += Math.abs(this.getTime(current) - this.getTime(next));\r\n }\r\n return timeDistances / (data.length - 1);\r\n }\r\n}\r\n","/**\r\n * This plugin is adapted from: https://github.com/3dcl/chartjs-plugin-responsive-downsample\r\n * for controlling the radius of point.\r\n *\r\n * MIT License\r\n * Copyright (c) 2018 3D Content Logistics\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n * SOFTWARE.\r\n */\r\nimport { ChartPoint } from 'chart.js';\r\nimport { Scale } from './chartjs_ext';\r\nimport moment from 'moment';\r\nimport * as utils from './utils';\r\n\r\nexport type XValue = number | string | Date | moment.Moment;\r\nexport type Range = [XValue, XValue];\r\n\r\nfunction getCompareValue(value: XValue): number {\r\n if (typeof value === 'number') {\r\n return value;\r\n } else if (typeof value === 'string') {\r\n return (new Date(value)).getTime();\r\n } else if (value instanceof Date) {\r\n return value.getTime();\r\n } else {\r\n return moment(value).toDate().getTime();\r\n }\r\n}\r\n\r\nexport function rangeIsEqual(previousValue: Range, currentValue: Range): boolean {\r\n if (utils.isNil(previousValue) ||\r\n utils.isNil(currentValue) ||\r\n utils.isNil(previousValue[0]) ||\r\n utils.isNil(previousValue[1]) ||\r\n utils.isNil(currentValue[0]) ||\r\n utils.isNil(currentValue[1])\r\n ) {\r\n return false;\r\n }\r\n\r\n previousValue = [getCompareValue(previousValue[0]), getCompareValue(previousValue[1])];\r\n currentValue = [getCompareValue(currentValue[0]), getCompareValue(currentValue[1])];\r\n\r\n return previousValue[0] === currentValue[0] && previousValue[1] === currentValue[1];\r\n}\r\n\r\nexport function getScaleRange(scale: Scale): Range {\r\n if (utils.isNil(scale)) {\r\n return [null, null];\r\n }\r\n\r\n const start = scale.getValueForPixel(scale.left);\r\n const end = scale.getValueForPixel(scale.right);\r\n\r\n return [start, end];\r\n}\r\n\r\nexport function cullData(data: ChartPoint[], range: Range): ChartPoint[] {\r\n const startValue = getCompareValue(range[0]);\r\n const endValue = getCompareValue(range[1]);\r\n let startIndex = 0;\r\n let endIndex = data.length;\r\n\r\n for (let i = 1; i < data.length; ++i) {\r\n const point = data[i];\r\n const compareValue = getCompareValue(point.x || point.t);\r\n\r\n if (compareValue <= startValue) {\r\n startIndex = i;\r\n }\r\n\r\n if (compareValue >= endValue) {\r\n endIndex = i + 1;\r\n break;\r\n }\r\n }\r\n\r\n return data.slice(startIndex, endIndex);\r\n}\r\n","/**\r\n * This plugin is adapted from: https://github.com/3dcl/chartjs-plugin-responsive-downsample\r\n * for controlling the radius of point.\r\n *\r\n * MIT License\r\n * Copyright (c) 2018 3D Content Logistics\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n * SOFTWARE.\r\n */\r\nimport moment from 'moment';\r\nimport { Chart, ChartDataSets, ChartPoint } from 'chart.js';\r\nimport { IChartPlugin, TimeScale } from './chartjs_ext';\r\nimport * as utils from './utils';\r\n\r\nimport { DataMipmap } from './data_mipmap';\r\nimport { LTTBDataMipmap } from './lttb_data_mipmap';\r\nimport * as data_culling from './data_culling';\r\n\r\ninterface MipMapDataSets extends ChartDataSets {\r\n originalData?: ChartPoint[];\r\n currentMipMapLevel?: number;\r\n mipMap?: DataMipmap;\r\n}\r\n\r\nexport interface ResponsiveDownsamplePluginOptions {\r\n /**\r\n * Enable/disable plugin\r\n */\r\n enabled?: boolean;\r\n /**\r\n * The aggregation algorithm to thin out data. Default: LTTB\r\n */\r\n aggregationAlgorithm?: 'AVG' | 'LTTB';\r\n /**\r\n * Desired minimal distance between data points in pixels. Default: 1 pixel\r\n */\r\n desiredDataPointDistance?: number;\r\n /**\r\n * Minimal number of data points. Limits\r\n */\r\n minNumPoints?: number;\r\n /**\r\n * Cull data to displayed range of x scale\r\n */\r\n cullData?: boolean;\r\n /**\r\n * Flag is set by plugin to trigger reload of data\r\n */\r\n needsUpdate?: boolean;\r\n /**\r\n * Current target resolution(Set by plugin)\r\n */\r\n targetResolution?: number;\r\n /**\r\n * Scale range of x axis\r\n */\r\n scaleRange?: data_culling.Range;\r\n /**\r\n * Draw points only if the points number less than the limitation\r\n */\r\n maxNumPointsToDraw?: number;\r\n}\r\n\r\n// Using dynamic flag to fix the issue of ng-packagr #696: Lambda not supported\r\n// @dynamic\r\n/**\r\n * Chart js Plugin for downsampling data\r\n */\r\nexport class ResponsiveDownsamplePlugin implements IChartPlugin {\r\n static getPluginOptions(chart: any): ResponsiveDownsamplePluginOptions {\r\n const options: ResponsiveDownsamplePluginOptions = chart.options.responsiveDownsample || {};\r\n utils.defaultsDeep(options, {\r\n enabled: false,\r\n aggregationAlgorithm: 'LTTB',\r\n desiredDataPointDistance: 1,\r\n minNumPoints: 100,\r\n maxNumPointsToDraw: 100,\r\n cullData: true\r\n });\r\n\r\n if (options.enabled) {\r\n chart.options.responsiveDownsample = options;\r\n }\r\n\r\n return options;\r\n }\r\n\r\n static hasDataChanged(chart: Chart): boolean {\r\n return !utils.isNil(\r\n utils.findInArray(\r\n chart.data.datasets as MipMapDataSets[],\r\n (dataset) => {\r\n return utils.isNil(dataset.mipMap);\r\n }\r\n )\r\n );\r\n }\r\n\r\n static createDataMipMap(chart: Chart, options: ResponsiveDownsamplePluginOptions): void {\r\n chart.data.datasets.forEach((dataset: MipMapDataSets) => {\r\n // @ts-ignore\r\n const data = !utils.isNil(dataset.originalData) ? dataset.originalData : dataset.data as ChartPoint[];\r\n\r\n const mipMap = (options.aggregationAlgorithm === 'LTTB')\r\n ? new LTTBDataMipmap(data, options.minNumPoints)\r\n : new DataMipmap(data, options.minNumPoints);\r\n\r\n dataset.originalData = data;\r\n dataset.mipMap = mipMap;\r\n // @ts-ignore\r\n dataset.data = mipMap.getMipMapLevel(mipMap.getNumLevel() - 1); // set last level for first render pass\r\n });\r\n }\r\n\r\n static restoreOriginalData(chart: Chart): boolean {\r\n let updated = false;\r\n\r\n chart.data.datasets.forEach((dataset: MipMapDataSets) => {\r\n // @ts-ignore\r\n if (!utils.isNil(dataset.originalData) && dataset.data !== dataset.originalData) {\r\n // @ts-ignore\r\n dataset.data = dataset.originalData;\r\n updated = true;\r\n }\r\n });\r\n\r\n return updated;\r\n }\r\n\r\n static getTargetResolution(chart: Chart, options: ResponsiveDownsamplePluginOptions): number {\r\n const xScale: TimeScale = (chart as any).scales['x-axis-0'];\r\n\r\n if (utils.isNil(xScale)) {\r\n return null;\r\n }\r\n\r\n const start = moment(xScale.getValueForPixel(xScale.left) as any);\r\n const end = moment(xScale.getValueForPixel(xScale.left + 1) as any);\r\n const targetResolution = end.diff(start);\r\n\r\n return targetResolution * options.desiredDataPointDistance;\r\n }\r\n\r\n static updateMipMap(chart: Chart, options: ResponsiveDownsamplePluginOptions, rangeChanged: boolean): boolean {\r\n let updated = false;\r\n\r\n chart.data.datasets.forEach((dataset: MipMapDataSets) => {\r\n const mipMap = dataset.mipMap;\r\n if (utils.isNil(mipMap)) {\r\n return;\r\n }\r\n\r\n const mipMalLevel = mipMap.getMipMapIndexForResolution(options.targetResolution);\r\n if (mipMalLevel === dataset.currentMipMapLevel && !rangeChanged) {\r\n // skip update if mip map level and data range did not change\r\n return;\r\n }\r\n updated = true;\r\n dataset.currentMipMapLevel = mipMalLevel;\r\n\r\n let newData = mipMap.getMipMapLevel(mipMalLevel);\r\n if (options.cullData) {\r\n newData = data_culling.cullData(newData, options.scaleRange);\r\n }\r\n\r\n // @ts-ignore\r\n dataset.data = newData;\r\n });\r\n\r\n return updated;\r\n }\r\n\r\n beforeInit(chart: Chart): void {\r\n const options = ResponsiveDownsamplePlugin.getPluginOptions(chart);\r\n if (!options.enabled) { return; }\r\n\r\n ResponsiveDownsamplePlugin.createDataMipMap(chart, options);\r\n options.needsUpdate = true;\r\n }\r\n\r\n beforeDatasetsUpdate(chart: Chart): void {\r\n const options = ResponsiveDownsamplePlugin.getPluginOptions(chart);\r\n if (!options.enabled) {\r\n // restore original data and remove state from options\r\n options.needsUpdate = ResponsiveDownsamplePlugin.restoreOriginalData(chart);\r\n delete options.targetResolution;\r\n delete options.scaleRange;\r\n return;\r\n }\r\n\r\n // only update mip map if data set was reloaded externally\r\n if (ResponsiveDownsamplePlugin.hasDataChanged(chart)) {\r\n ResponsiveDownsamplePlugin.createDataMipMap(chart, options);\r\n options.needsUpdate = true;\r\n }\r\n }\r\n\r\n beforeRender(chart: Chart): boolean {\r\n const options = ResponsiveDownsamplePlugin.getPluginOptions(chart);\r\n if (!options.enabled) {\r\n // update chart if data was restored from original data\r\n if (options.needsUpdate) {\r\n options.needsUpdate = false;\r\n chart.update(0);\r\n\r\n return false;\r\n }\r\n return;\r\n }\r\n\r\n const targetResolution = ResponsiveDownsamplePlugin.getTargetResolution(chart, options);\r\n const xScale: TimeScale = (chart as any).scales['x-axis-0'];\r\n const scaleRange = data_culling.getScaleRange(xScale);\r\n const rangeChanged = !data_culling.rangeIsEqual(options.scaleRange, scaleRange);\r\n\r\n if (options.needsUpdate ||\r\n options.targetResolution !== targetResolution ||\r\n rangeChanged\r\n ) {\r\n options.targetResolution = targetResolution;\r\n options.scaleRange = scaleRange;\r\n options.needsUpdate = false;\r\n\r\n if (ResponsiveDownsamplePlugin.updateMipMap(chart, options, rangeChanged)) {\r\n utils.changePointRadius(chart, options);\r\n // update chart and cancel current render\r\n chart.update(0);\r\n\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","/**\r\n * This plugin is adapted from: https://github.com/3dcl/chartjs-plugin-responsive-downsample\r\n * for controlling the radius of point.\r\n *\r\n * MIT License\r\n * Copyright (c) 2018 3D Content Logistics\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n * SOFTWARE.\r\n */\r\nimport * as chartjs from 'chart.js';\r\nconst Chart = window && (window as any).Chart ? (window as any).Chart : chartjs.Chart;\r\n\r\nimport { ResponsiveDownsamplePlugin, ResponsiveDownsamplePluginOptions } from './responsive_downsample_plugin';\r\nexport { ResponsiveDownsamplePlugin, ResponsiveDownsamplePluginOptions } from './responsive_downsample_plugin';\r\n\r\n\r\n// comment this because this plugin is only used internally, merge ChartOptions interface is unnecessary\r\n// and causes build error: \"error TS2665: Invalid module name in augmentation.\".\r\n// // Extend chart.js options interface\r\n// declare module 'chart.js' {\r\n// interface ChartOptions {\r\n// /**\r\n// * Options for responsive downsample plugin\r\n// */\r\n// responsiveDownsample?: ResponsiveDownsamplePluginOptions;\r\n// }\r\n// }\r\n\r\nChart.pluginService.register(new ResponsiveDownsamplePlugin());\r\n","/**\r\n * this plugin is adapted from: https://github.com/chartjs/chartjs-plugin-zoom\r\n * for following two open issues:\r\n * https://github.com/chartjs/chartjs-plugin-zoom/pull/155\r\n * https://github.com/chartjs/chartjs-plugin-zoom/pull/150\r\n *\r\n * The MIT License (MIT) Copyright (c) 2013-2016 Nick Downie\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this\r\n * software and associated documentation files (the \"Software\"), to deal in the Software\r\n * without restriction, including without limitation the rights to use, copy, modify, merge,\r\n * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\r\n * to whom the Software is furnished to do so, subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all copies or\r\n * substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\r\n * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE\r\n * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\r\n * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n * THE SOFTWARE.\r\n */\r\n\r\n/*jslint browser:true, devel:true, white:true, vars:true */\r\n/*global require*/\r\n\r\n// hammer JS for touch support\r\nimport * as hammerjs from 'hammerjs';\r\nconst Hammer = window && (window as any).Hammer ? (window as any).Hammer : hammerjs.Hammer;\r\n\r\n// Get the chart variable\r\nimport * as chartjs from 'chart.js';\r\nconst Chart = window && (window as any).Chart ? (window as any).Chart : chartjs.Chart;\r\n\r\nconst helpers = Chart.helpers;\r\n\r\n// Take the zoom namespace of Chart\r\nconst zoomNS = Chart.Zoom = Chart.Zoom || {};\r\n\r\n// Where we store functions to handle different scale types\r\nconst zoomFunctions = zoomNS.zoomFunctions = zoomNS.zoomFunctions || {};\r\nconst panFunctions = zoomNS.panFunctions = zoomNS.panFunctions || {};\r\n\r\n// Default options if none are provided\r\nconst defaultOptions = zoomNS.defaults = {\r\n pan: {\r\n enabled: true,\r\n mode: 'xy',\r\n speed: 20,\r\n threshold: 10\r\n },\r\n zoom: {\r\n enabled: true,\r\n mode: 'xy',\r\n sensitivity: 3\r\n }\r\n};\r\n\r\nfunction directionEnabled(mode, dir) {\r\n if (mode === undefined) {\r\n return true;\r\n } else if (typeof mode === 'string') {\r\n return mode.indexOf(dir) !== -1;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction rangeMaxLimiter(zoomPanOptions, newMax) {\r\n if (zoomPanOptions.scaleAxes && zoomPanOptions.rangeMax &&\r\n !helpers.isNullOrUndef(zoomPanOptions.rangeMax[zoomPanOptions.scaleAxes])) {\r\n const rangeMax = zoomPanOptions.rangeMax[zoomPanOptions.scaleAxes];\r\n if (newMax > rangeMax) {\r\n newMax = rangeMax;\r\n }\r\n }\r\n return newMax;\r\n}\r\n\r\nfunction rangeMinLimiter(zoomPanOptions, newMin) {\r\n if (zoomPanOptions.scaleAxes && zoomPanOptions.rangeMin &&\r\n !helpers.isNullOrUndef(zoomPanOptions.rangeMin[zoomPanOptions.scaleAxes])) {\r\n const rangeMin = zoomPanOptions.rangeMin[zoomPanOptions.scaleAxes];\r\n if (newMin < rangeMin) {\r\n newMin = rangeMin;\r\n }\r\n }\r\n return newMin;\r\n}\r\n\r\nfunction zoomIndexScale(scale, zoom, center, zoomOptions) {\r\n const labels = scale.chart.data.labels;\r\n let minIndex = scale.minIndex;\r\n const lastLabelIndex = labels.length - 1;\r\n let maxIndex = scale.maxIndex;\r\n const sensitivity = zoomOptions.sensitivity;\r\n const chartCenter = scale.isHorizontal() ? scale.left + (scale.width / 2) : scale.top + (scale.height / 2);\r\n const centerPointer = scale.isHorizontal() ? center.x : center.y;\r\n\r\n zoomNS.zoomCumulativeDelta = zoom > 1 ? zoomNS.zoomCumulativeDelta + 1 : zoomNS.zoomCumulativeDelta - 1;\r\n\r\n if (Math.abs(zoomNS.zoomCumulativeDelta) > sensitivity) {\r\n if (zoomNS.zoomCumulativeDelta < 0) {\r\n if (centerPointer >= chartCenter) {\r\n if (minIndex <= 0) {\r\n maxIndex = Math.min(lastLabelIndex, maxIndex + 1);\r\n } else {\r\n minIndex = Math.max(0, minIndex - 1);\r\n }\r\n } else if (centerPointer < chartCenter) {\r\n if (maxIndex >= lastLabelIndex) {\r\n minIndex = Math.max(0, minIndex - 1);\r\n } else {\r\n maxIndex = Math.min(lastLabelIndex, maxIndex + 1);\r\n }\r\n }\r\n zoomNS.zoomCumulativeDelta = 0;\r\n } else if (zoomNS.zoomCumulativeDelta > 0) {\r\n if (centerPointer >= chartCenter) {\r\n minIndex = minIndex < maxIndex ? minIndex = Math.min(maxIndex, minIndex + 1) : minIndex;\r\n } else if (centerPointer < chartCenter) {\r\n maxIndex = maxIndex > minIndex ? maxIndex = Math.max(minIndex, maxIndex - 1) : maxIndex;\r\n }\r\n zoomNS.zoomCumulativeDelta = 0;\r\n }\r\n scale.options.ticks.min = rangeMinLimiter(zoomOptions, labels[minIndex]);\r\n scale.options.ticks.max = rangeMaxLimiter(zoomOptions, labels[maxIndex]);\r\n }\r\n}\r\n\r\nfunction zoomTimeScale(scale, zoom, center, zoomOptions) {\r\n const options = scale.options;\r\n\r\n // var range;\r\n // var min_percent;\r\n // if (scale.isHorizontal()) {\r\n // range = scale.right - scale.left;\r\n // min_percent = (center.x - scale.left) / range;\r\n // } else {\r\n // range = scale.bottom - scale.top;\r\n // min_percent = (center.y - scale.top) / range;\r\n // }\r\n //\r\n // var max_percent = 1 - min_percent;\r\n const range = scale.max - scale.min;\r\n const newDiff = range * (zoom - 1);\r\n\r\n const cursorPixel = scale.isHorizontal() ? center.x : center.y;\r\n const min_percent = (scale.getValueForPixel(cursorPixel) - scale.min) / range;\r\n const max_percent = 1 - min_percent;\r\n\r\n const minDelta = newDiff * min_percent;\r\n const maxDelta = newDiff * max_percent;\r\n\r\n const newMin = scale.min + minDelta;\r\n const newMax = scale.max - maxDelta;\r\n\r\n const diffMinMax = newMax - newMin;\r\n const minLimitExceeded = rangeMinLimiter(zoomOptions, diffMinMax) !== diffMinMax;\r\n const maxLimitExceeded = rangeMaxLimiter(zoomOptions, diffMinMax) !== diffMinMax;\r\n\r\n if (!minLimitExceeded && !maxLimitExceeded) {\r\n options.time.min = newMin;\r\n options.time.max = newMax;\r\n }\r\n}\r\n\r\nfunction zoomNumericalScale(scale, zoom, center, zoomOptions) {\r\n const range = scale.max - scale.min;\r\n const newDiff = range * (zoom - 1);\r\n\r\n const cursorPixel = scale.isHorizontal() ? center.x : center.y;\r\n const min_percent = (scale.getValueForPixel(cursorPixel) - scale.min) / range;\r\n const max_percent = 1 - min_percent;\r\n\r\n const minDelta = newDiff * min_percent;\r\n const maxDelta = newDiff * max_percent;\r\n\r\n scale.options.ticks.min = rangeMinLimiter(zoomOptions, scale.min + minDelta);\r\n scale.options.ticks.max = rangeMaxLimiter(zoomOptions, scale.max - maxDelta);\r\n}\r\n\r\nfunction zoomScale(scale, zoom, center, zoomOptions) {\r\n const fn = zoomFunctions[scale.options.type];\r\n if (fn) {\r\n fn(scale, zoom, center, zoomOptions);\r\n }\r\n}\r\n\r\nfunction doZoom(chartInstance, zoom, center, whichAxes?) {\r\n const ca = chartInstance.chartArea;\r\n if (!center) {\r\n center = {\r\n x: (ca.left + ca.right) / 2,\r\n y: (ca.top + ca.bottom) / 2,\r\n };\r\n }\r\n\r\n const zoomOptions = chartInstance.options.zoom;\r\n\r\n if (zoomOptions && helpers.getValueOrDefault(zoomOptions.enabled, defaultOptions.zoom.enabled)) {\r\n // Do the zoom here\r\n const zoomMode = helpers.getValueOrDefault(chartInstance.options.zoom.mode, defaultOptions.zoom.mode);\r\n zoomOptions.sensitivity = helpers.getValueOrDefault(chartInstance.options.zoom.sensitivity, defaultOptions.zoom.sensitivity);\r\n\r\n // Which axe should be modified when figers were used.\r\n let _whichAxes;\r\n if (zoomMode === 'xy' && whichAxes !== undefined) {\r\n // based on fingers positions\r\n _whichAxes = whichAxes;\r\n } else {\r\n // no effect\r\n _whichAxes = 'xy';\r\n }\r\n\r\n helpers.each(chartInstance.scales, function(scale, id) {\r\n if (scale.isHorizontal() && directionEnabled(zoomMode, 'x') && directionEnabled(_whichAxes, 'x')) {\r\n zoomOptions.scaleAxes = 'x';\r\n zoomScale(scale, zoom, center, zoomOptions);\r\n } else if (!scale.isHorizontal() && directionEnabled(zoomMode, 'y') && directionEnabled(_whichAxes, 'y')) {\r\n // Do Y zoom\r\n zoomOptions.scaleAxes = 'y';\r\n zoomScale(scale, zoom, center, zoomOptions);\r\n }\r\n });\r\n\r\n chartInstance.update(0);\r\n if (typeof zoomOptions.onZoom === 'function') {\r\n zoomOptions.onZoom();\r\n }\r\n }\r\n}\r\n\r\nfunction panIndexScale(scale, delta, panOptions) {\r\n const labels = scale.chart.data.labels;\r\n const lastLabelIndex = labels.length - 1;\r\n const offsetAmt = Math.max((scale.ticks.length - ((scale.options.gridLines.offsetGridLines) ? 0 : 1)), 1);\r\n const panSpeed = panOptions.speed;\r\n let minIndex = scale.minIndex;\r\n const step = Math.round(scale.width / (offsetAmt * panSpeed));\r\n let maxIndex;\r\n\r\n zoomNS.panCumulativeDelta += delta;\r\n\r\n minIndex = zoomNS.panCumulativeDelta > step ? Math.max(0, minIndex - 1) : zoomNS.panCumulativeDelta < -step ? Math.min(lastLabelIndex - offsetAmt + 1, minIndex + 1) : minIndex;\r\n zoomNS.panCumulativeDelta = minIndex !== scale.minIndex ? 0 : zoomNS.panCumulativeDelta;\r\n\r\n maxIndex = Math.min(lastLabelIndex, minIndex + offsetAmt - 1);\r\n\r\n scale.options.ticks.min = rangeMinLimiter(panOptions, labels[minIndex]);\r\n scale.options.ticks.max = rangeMaxLimiter(panOptions, labels[maxIndex]);\r\n}\r\n\r\nfunction panTimeScale(scale, delta, panOptions) {\r\n const options = scale.options;\r\n const limitedMax = rangeMaxLimiter(panOptions, scale.getValueForPixel(scale.getPixelForValue(scale.max) - delta));\r\n const limitedMin = rangeMinLimiter(panOptions, scale.getValueForPixel(scale.getPixelForValue(scale.min) - delta));\r\n\r\n const limitedTimeDelta = delta < 0 ? limitedMax - scale.max : limitedMin - scale.min;\r\n\r\n options.time.max = scale.max + limitedTimeDelta;\r\n options.time.min = scale.min + limitedTimeDelta;\r\n}\r\n\r\nfunction panNumericalScale(scale, delta, panOptions) {\r\n const tickOpts = scale.options.ticks;\r\n const start = scale.start,\r\n end = scale.end;\r\n\r\n if (tickOpts.reverse) {\r\n tickOpts.max = scale.getValueForPixel(scale.getPixelForValue(start) - delta);\r\n tickOpts.min = scale.getValueForPixel(scale.getPixelForValue(end) - delta);\r\n } else {\r\n tickOpts.min = scale.getValueForPixel(scale.getPixelForValue(start) - delta);\r\n tickOpts.max = scale.getValueForPixel(scale.getPixelForValue(end) - delta);\r\n }\r\n tickOpts.min = rangeMinLimiter(panOptions, tickOpts.min);\r\n tickOpts.max = rangeMaxLimiter(panOptions, tickOpts.max);\r\n}\r\n\r\nfunction panScale(scale, delta, panOptions) {\r\n const fn = panFunctions[scale.options.type];\r\n if (fn) {\r\n fn(scale, delta, panOptions);\r\n }\r\n}\r\n\r\nfunction doPan(chartInstance, deltaX, deltaY) {\r\n const panOptions = chartInstance.options.pan;\r\n if (panOptions && helpers.getValueOrDefault(panOptions.enabled, defaultOptions.pan.enabled)) {\r\n const panMode = helpers.getValueOrDefault(chartInstance.options.pan.mode, defaultOptions.pan.mode);\r\n panOptions.speed = helpers.getValueOrDefault(chartInstance.options.pan.speed, defaultOptions.pan.speed);\r\n\r\n helpers.each(chartInstance.scales, function(scale, id) {\r\n if (scale.isHorizontal() && directionEnabled(panMode, 'x') && deltaX !== 0) {\r\n panOptions.scaleAxes = 'x';\r\n panScale(scale, deltaX, panOptions);\r\n } else if (!scale.isHorizontal() && directionEnabled(panMode, 'y') && deltaY !== 0) {\r\n panOptions.scaleAxes = 'y';\r\n panScale(scale, deltaY, panOptions);\r\n }\r\n });\r\n\r\n chartInstance.update(0);\r\n if (typeof panOptions.onPan === 'function') {\r\n panOptions.onPan();\r\n }\r\n }\r\n}\r\n\r\nfunction positionInChartArea(chartInstance, position) {\r\n return (position.x >= chartInstance.chartArea.left && position.x <= chartInstance.chartArea.right) &&\r\n (position.y >= chartInstance.chartArea.top && position.y <= chartInstance.chartArea.bottom);\r\n}\r\n\r\nfunction getYAxis(chartInstance) {\r\n const scales = chartInstance.scales;\r\n\r\n for (const scaleId in scales) {\r\n if (scales.hasOwnProperty(scaleId)) {\r\n const scale = scales[scaleId];\r\n if (!scale.isHorizontal()) {\r\n return scale;\r\n }\r\n }\r\n }\r\n}\r\n\r\n// Store these for later\r\nzoomNS.zoomFunctions.category = zoomIndexScale;\r\nzoomNS.zoomFunctions.time = zoomTimeScale;\r\nzoomNS.zoomFunctions.linear = zoomNumericalScale;\r\nzoomNS.zoomFunctions.logarithmic = zoomNumericalScale;\r\nzoomNS.panFunctions.category = panIndexScale;\r\nzoomNS.panFunctions.time = panTimeScale;\r\nzoomNS.panFunctions.linear = panNumericalScale;\r\nzoomNS.panFunctions.logarithmic = panNumericalScale;\r\n// Globals for catergory pan and zoom\r\nzoomNS.panCumulativeDelta = 0;\r\nzoomNS.zoomCumulativeDelta = 0;\r\n\r\n// Chartjs Zoom Plugin\r\nexport const zoomPlugin = {\r\n afterInit: function(chartInstance) {\r\n helpers.each(chartInstance.scales, function(scale) {\r\n scale.originalOptions = helpers.clone(scale.options);\r\n });\r\n\r\n chartInstance.resetZoom = function() {\r\n helpers.each(chartInstance.scales, function(scale, id) {\r\n const timeOptions = scale.options.time;\r\n const tickOptions = scale.options.ticks;\r\n\r\n if (timeOptions) {\r\n timeOptions.min = scale.originalOptions.time.min;\r\n timeOptions.max = scale.originalOptions.time.max;\r\n }\r\n\r\n if (tickOptions) {\r\n tickOptions.min = scale.originalOptions.ticks.min;\r\n tickOptions.max = scale.originalOptions.ticks.max;\r\n }\r\n });\r\n\r\n helpers.each(chartInstance.data.datasets, function(dataset, id) {\r\n dataset._meta = null;\r\n });\r\n\r\n chartInstance.update();\r\n };\r\n\r\n },\r\n beforeInit: function(chartInstance) {\r\n chartInstance.zoom = {};\r\n\r\n const node = chartInstance.zoom.node = chartInstance.chart.ctx.canvas;\r\n\r\n const options = chartInstance.options;\r\n const panThreshold = helpers.getValueOrDefault(options.pan ? options.pan.threshold : undefined, zoomNS.defaults.pan.threshold);\r\n if (!options.zoom || !options.zoom.enabled) {\r\n return;\r\n }\r\n if (options.zoom.drag) {\r\n // Only want to zoom horizontal axis\r\n options.zoom.mode = 'x';\r\n\r\n chartInstance.zoom._mouseDownHandler = function(event) {\r\n chartInstance.zoom._dragZoomStart = event;\r\n };\r\n node.addEventListener('mousedown', chartInstance.zoom._mouseDownHandler);\r\n\r\n chartInstance.zoom._mouseMoveHandler = function(event) {\r\n if (chartInstance.zoom._dragZoomStart) {\r\n chartInstance.zoom._dragZoomEnd = event;\r\n chartInstance.update(0);\r\n }\r\n };\r\n node.addEventListener('mousemove', chartInstance.zoom._mouseMoveHandler);\r\n\r\n chartInstance.zoom._mouseUpHandler = function(event) {\r\n if (chartInstance.zoom._dragZoomStart) {\r\n const chartArea = chartInstance.chartArea;\r\n const yAxis = getYAxis(chartInstance);\r\n const beginPoint = chartInstance.zoom._dragZoomStart;\r\n const offsetX = beginPoint.target.getBoundingClientRect().left;\r\n const startX = Math.max(Math.min(beginPoint.clientX, event.clientX) - offsetX, chartArea.left);\r\n const endX = Math.min(Math.max(beginPoint.clientX, event.clientX) - offsetX, chartArea.right);\r\n const dragDistance = endX - startX;\r\n const chartDistance = chartArea.right - chartArea.left;\r\n const zoom = 1 + (chartDistance - dragDistance) / chartDistance;\r\n const centerX = chartArea.left + (startX - chartArea.left) / (zoom - 1);\r\n\r\n // Remove drag start and end before chart update to stop drawing selected area\r\n chartInstance.zoom._dragZoomStart = null;\r\n chartInstance.zoom._dragZoomEnd = null;\r\n\r\n if (dragDistance > 0) {\r\n doZoom(chartInstance, zoom, {\r\n x: centerX,\r\n y: (yAxis.bottom - yAxis.top) / 2,\r\n });\r\n }\r\n }\r\n };\r\n // node.addEventListener('mouseup', chartInstance.zoom._mouseUpHandler);\r\n node.ownerDocument.addEventListener('mouseup', chartInstance.zoom._mouseUpHandler);\r\n } else {\r\n chartInstance.zoom._wheelHandler = function(event) {\r\n const rect = event.target.getBoundingClientRect();\r\n const offsetX = event.clientX - rect.left;\r\n const offsetY = event.clientY - rect.top;\r\n\r\n const center = {\r\n x : offsetX,\r\n y : offsetY\r\n };\r\n\r\n if (event.deltaY < 0) {\r\n doZoom(chartInstance, 1.1, center);\r\n } else {\r\n doZoom(chartInstance, 0.909, center);\r\n }\r\n // Prevent the event from triggering the default behavior (eg. Content scrolling).\r\n event.preventDefault();\r\n };\r\n\r\n node.addEventListener('wheel', chartInstance.zoom._wheelHandler);\r\n }\r\n\r\n if (Hammer) {\r\n const mc = new Hammer.Manager(node);\r\n mc.add(new Hammer.Pinch());\r\n mc.add(new Hammer.Pan({\r\n threshold: panThreshold\r\n }));\r\n\r\n // Hammer reports the total scaling. We need the incremental amount\r\n let currentPinchScaling;\r\n const handlePinch = function (e) {\r\n const diff = 1 / (currentPinchScaling) * e.scale;\r\n const rect = e.target.getBoundingClientRect();\r\n const offsetX = e.center.x - rect.left;\r\n const offsetY = e.center.y - rect.top;\r\n const center = {\r\n x : offsetX,\r\n y : offsetY\r\n };\r\n\r\n // fingers position difference\r\n const x = Math.abs(e.pointers[0].clientX - e.pointers[1].clientX);\r\n const y = Math.abs(e.pointers[0].clientY - e.pointers[1].clientY);\r\n\r\n // diagonal fingers will change both (xy) axes\r\n const p = x / y;\r\n let xy;\r\n if (p > 0.3 && p < 1.7) {\r\n xy = 'xy';\r\n } else if (x > y) {\r\n // x axis\r\n xy = 'x';\r\n } else {\r\n // y axis\r\n xy = 'y';\r\n }\r\n\r\n doZoom(chartInstance, diff, center, xy);\r\n\r\n // Keep track of overall scale\r\n currentPinchScaling = e.scale;\r\n };\r\n\r\n mc.on('pinchstart', function(e) {\r\n currentPinchScaling = 1; // reset tracker\r\n });\r\n mc.on('pinch', handlePinch);\r\n mc.on('pinchend', function(e) {\r\n handlePinch(e);\r\n currentPinchScaling = null; // reset\r\n zoomNS.zoomCumulativeDelta = 0;\r\n });\r\n\r\n let currentDeltaX = null, currentDeltaY = null, panning = false;\r\n const handlePan = function (e) {\r\n if (currentDeltaX !== null && currentDeltaY !== null) {\r\n panning = true;\r\n const deltaX = e.deltaX - currentDeltaX;\r\n const deltaY = e.deltaY - currentDeltaY;\r\n currentDeltaX = e.deltaX;\r\n currentDeltaY = e.deltaY;\r\n doPan(chartInstance, deltaX, deltaY);\r\n }\r\n };\r\n\r\n mc.on('panstart', function(e) {\r\n currentDeltaX = 0;\r\n currentDeltaY = 0;\r\n handlePan(e);\r\n });\r\n mc.on('panmove', handlePan);\r\n mc.on('panend', function(e) {\r\n currentDeltaX = null;\r\n currentDeltaY = null;\r\n zoomNS.panCumulativeDelta = 0;\r\n setTimeout(function() { panning = false; }, 500);\r\n });\r\n\r\n chartInstance.zoom._ghostClickHandler = function(e) {\r\n if (panning) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n };\r\n node.addEventListener('click', chartInstance.zoom._ghostClickHandler);\r\n\r\n chartInstance._mc = mc;\r\n }\r\n },\r\n\r\n beforeDatasetsDraw: function(chartInstance) {\r\n const ctx = chartInstance.chart.ctx;\r\n const chartArea = chartInstance.chartArea;\r\n ctx.save();\r\n ctx.beginPath();\r\n\r\n if (chartInstance.zoom._dragZoomEnd) {\r\n const yAxis = getYAxis(chartInstance);\r\n const beginPoint = chartInstance.zoom._dragZoomStart;\r\n const endPoint = chartInstance.zoom._dragZoomEnd;\r\n const offsetX = beginPoint.target.getBoundingClientRect().left;\r\n const startX = Math.min(beginPoint.clientX, endPoint.clientX) - offsetX;\r\n const endX = Math.max(beginPoint.clientX, endPoint.clientX) - offsetX;\r\n const rectWidth = endX - startX;\r\n\r\n\r\n ctx.fillStyle = 'rgba(225,225,225,0.5)';\r\n ctx.lineWidth = 5;\r\n ctx.fillRect(startX, yAxis.top, rectWidth, yAxis.bottom - yAxis.top);\r\n }\r\n\r\n ctx.rect(chartArea.left, chartArea.top, chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\r\n ctx.clip();\r\n },\r\n\r\n afterDatasetsDraw: function(chartInstance) {\r\n chartInstance.chart.ctx.restore();\r\n },\r\n\r\n destroy: function(chartInstance) {\r\n if (chartInstance.zoom) {\r\n const options = chartInstance.options;\r\n const node = chartInstance.zoom.node;\r\n\r\n if (options.zoom && options.zoom.drag) {\r\n node.removeEventListener('mousedown', chartInstance.zoom._mouseDownHandler);\r\n node.removeEventListener('mousemove', chartInstance.zoom._mouseMoveHandler);\r\n // node.removeEventListener('mouseup', chartInstance.zoom._mouseUpHandler);\r\n node.ownerDocument.removeEventListener('mouseup', chartInstance.zoom._mouseUpHandler);\r\n } else {\r\n node.removeEventListener('wheel', chartInstance.zoom._wheelHandler);\r\n }\r\n\r\n if (Hammer) {\r\n node.removeEventListener('click', chartInstance.zoom._ghostClickHandler);\r\n }\r\n\r\n delete chartInstance.zoom;\r\n\r\n const mc = chartInstance._mc;\r\n if (mc) {\r\n mc.remove('pinchstart');\r\n mc.remove('pinch');\r\n mc.remove('pinchend');\r\n mc.remove('panstart');\r\n mc.remove('pan');\r\n mc.remove('panend');\r\n }\r\n }\r\n }\r\n};\r\n\r\nChart.pluginService.register(zoomPlugin);\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 '../utils/chartjs-downsample';\r\nimport '../utils/chartjs-zoom';\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})\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 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;\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 }).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 }\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 });\r\n });\r\n } else {\r\n if (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 }\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 }\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","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { OwlDateTimeModule, OwlNativeDateTimeModule } from '@danielmoncada/angular-datetime-picker';\r\nimport {\r\n NameServerHistoryComponent,\r\n ProgressBarComponent,\r\n FileDropInputComponent,\r\n TimezoneSelectorComponent,\r\n InstructionComponent,\r\n PortSelectorComponent,\r\n TimeRangeSelectorComponent,\r\n AlertModule\r\n} from './components';\r\nimport { SelectionTableModule } from 'ngx-selection-table';\r\nimport { DropdownListModule } from 'ngx-dropdown-list';\r\n\r\n@NgModule({\r\n declarations: [\r\n NameServerHistoryComponent,\r\n FileDropInputComponent,\r\n ProgressBarComponent,\r\n TimezoneSelectorComponent,\r\n PortSelectorComponent,\r\n InstructionComponent,\r\n TimeRangeSelectorComponent\r\n ],\r\n exports: [\r\n NameServerHistoryComponent\r\n ],\r\n imports: [\r\n AlertModule,\r\n SelectionTableModule,\r\n DropdownListModule,\r\n OwlDateTimeModule,\r\n OwlNativeDateTimeModule,\r\n CommonModule,\r\n FormsModule\r\n ],\r\n entryComponents: [],\r\n providers: [],\r\n bootstrap: []\r\n})\r\nexport class NameserverHistoryModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TimezoneSelectorService","i1.PortSelectorService","i1","i2","Chart","utils.isNil","utils.clamp","utils.findIndexInArray","moment","utils.defaultsDeep","utils.findInArray","data_culling.cullData","data_culling.getScaleRange","data_culling.rangeIsEqual","utils.changePointRadius","i1.FileService","i1.ChartService","i1.UIService","i2.FileDropInputComponent","i3.ProgressBarComponent","i4.TimeRangeSelectorComponent","i5.TimezoneSelectorComponent","i6.PortSelectorComponent","i7.InstructionComponent","i9.AlertComponent","i10"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-hana-nameserver-history-viewer.mjs","sources":["../../src/nameserver-history-viewer/components/alert/alert.component.ts","../../src/nameserver-history-viewer/components/alert/alert.component.html","../../src/nameserver-history-viewer/components/alert/alert.module.ts","../../src/nameserver-history-viewer/components/file-drop-input/file-drop-input.component.ts","../../src/nameserver-history-viewer/components/progress-bar/progress-bar.component.ts","../../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/components/timezone-selector/timezone-selector.service.ts","../../src/nameserver-history-viewer/components/timezone-selector/timezone-selector.component.ts","../../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/instruction/instruction.component.ts","../../src/nameserver-history-viewer/components/instruction/instruction.component.html","../../src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.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/utils/chartjs-downsample/utils.ts","../../src/nameserver-history-viewer/utils/chartjs-downsample/data_mipmap.ts","../../src/nameserver-history-viewer/utils/chartjs-downsample/lttb_data_mipmap.ts","../../src/nameserver-history-viewer/utils/chartjs-downsample/data_culling.ts","../../src/nameserver-history-viewer/utils/chartjs-downsample/responsive_downsample_plugin.ts","../../src/nameserver-history-viewer/utils/chartjs-downsample/index.ts","../../src/nameserver-history-viewer/utils/chartjs-zoom/chart.zoom.ts","../../src/nameserver-history-viewer/components/nameserver-history.component.ts","../../src/nameserver-history-viewer/components/nameserver-history.component.html","../../src/nameserver-history-viewer/nameserver-history.module.ts","../../ngx-hana-nameserver-history-viewer.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'alert',\r\n templateUrl: './alert.component.html',\r\n styleUrls: ['./alert.component.scss'],\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;\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() {\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 }\r\n }\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 {AlertComponent} from './alert.component';\r\nimport {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\n\r\n@NgModule({\r\n declarations: [\r\n AlertComponent,\r\n ],\r\n exports: [AlertComponent],\r\n imports: [CommonModule],\r\n providers: [],\r\n bootstrap: [],\r\n})\r\nexport class AlertModule {}\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 { 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})\r\n\r\nexport class ProgressBarComponent {\r\n\r\n @Input()\r\n public progress: number;\r\n\r\n}\r\n","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}\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}\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}\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 {\r\n if (inputTarget && inputTarget.files && inputTarget.files.length >= 0) {\r\n return inputTarget.files[0];\r\n }\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 { 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\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 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 { 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\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 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 {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})\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 { Component, Input, ChangeDetectionStrategy, Output, EventEmitter } from '@angular/core';\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 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 { 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 }\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 }\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\r\n","import { Injectable } from '@angular/core';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { Chart } from 'chart.js';\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// Using dynamic flag to fix the issue of ng-packagr #696: Lambda not supported\r\n// @dynamic\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 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 && 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 && chart.options.scales && (chart.options.scales.xAxes || chart.options.scales.yAxis)) {\r\n if (chart.options.scales.xAxes) {\r\n chart.options.scales.xAxes.length = 0;\r\n chart.options.scales.xAxes = void 0;\r\n }\r\n if (chart.options.scales.yAxes) {\r\n chart.options.scales.yAxes.length = 0;\r\n chart.options.scales.yAxes = void 0;\r\n }\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[]): any {\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.25,\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 };\r\n });\r\n }\r\n private static _generateXAxes(time: number[]): any {\r\n const format = 'MMMDD HH:mm:ss';\r\n return [\r\n {\r\n type: 'time',\r\n time: {\r\n // unit: 'second',\r\n // stepSize: 1,\r\n displayFormats: {\r\n 'millisecond': format,\r\n 'second': format,\r\n 'minute': format,\r\n 'hour': 'MMMDD HH',\r\n 'day': 'MMMDD YYYY',\r\n 'week': format,\r\n 'month': format,\r\n 'quarter': format,\r\n 'year': format,\r\n },\r\n tooltipFormat: 'll HH:mm:ss',\r\n min: time[0],\r\n max: time[time.length - 1]\r\n },\r\n // scaleLabel: {\r\n // display: false,\r\n // labelString: 'Date'\r\n // },\r\n ticks: {\r\n maxRotation: 0,\r\n reverse: true\r\n }\r\n }\r\n ];\r\n }\r\n private static _generateYAxes(data: ChartContentDataItem[][], yScale: number[]): any {\r\n return data.map((item, i) => ({\r\n type: 'linear',\r\n display: false,\r\n position: 'left',\r\n id: `y-axis-${i}`,\r\n gridLines: {\r\n },\r\n ticks: {\r\n min: 0,\r\n max: yScale[i]\r\n }\r\n }));\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): any {\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 elements: {point: {radius: 0, hitRadius: 5, hoverRadius: 5}}, // set radius to 0 not to display point\r\n responsive: true,\r\n animation: {\r\n duration: 0, // general animation time\r\n },\r\n hover: {\r\n animationDuration: 0, // duration of animations when hovering an item\r\n onHover: function (e) {\r\n const point = this.getElementAtEvent(e);\r\n if (point.length) {\r\n e.target.style.cursor = 'pointer';\r\n } else {\r\n e.target.style.cursor = 'default';\r\n }\r\n }\r\n },\r\n responsiveAnimationDuration: 0, // animation duration after a resize\r\n legend: {\r\n position: 'bottom',\r\n onHover: (e) => {\r\n e.target.style.cursor = 'pointer';\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 responsiveDownsample: {\r\n enabled: true,\r\n desiredDataPointDistance: 2,\r\n minNumPoints: 200,\r\n maxNumPointsToDraw: 100\r\n },\r\n tooltips: {\r\n callbacks: {\r\n label: function(tooltipItem, chartData) {\r\n // format numbers with commas and add unit information\r\n const label = chartData.datasets[tooltipItem.datasetIndex].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(tooltipItem.yLabel)}${unit}`;\r\n } else {\r\n return getNumberWithCommas(tooltipItem.yLabel);\r\n }\r\n }\r\n }\r\n },\r\n scales: {\r\n xAxes: ChartService._generateXAxes(time),\r\n yAxes: ChartService._generateYAxes(data, yScale)\r\n },\r\n zoom: {\r\n enabled: true,\r\n drag: true,\r\n mode: 'x',\r\n onZoom: zoomCallback\r\n }\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 * 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 chart.destroy();\r\n }\r\n resolve();\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 chart.resetZoom();\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 * 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 const cfg: any = ChartService._generateChartConfig(time, data, yScale, header, headerKey, selection, tableSource, title, defaultItems, zoomCB);\r\n this._chart = new Chart(ctx, cfg);\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","/**\r\n * This plugin is adapted from: https://github.com/3dcl/chartjs-plugin-responsive-downsample\r\n * for controlling the radius of point.\r\n *\r\n * MIT License\r\n * Copyright (c) 2018 3D Content Logistics\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n * SOFTWARE.\r\n */\r\n\r\n/**\r\n * Check if a value is null or undefined\r\n */\r\nexport function isNil(value: any): value is null | undefined {\r\n return (typeof value === 'undefined') || value === null;\r\n}\r\n\r\n/**\r\n * Clamp a number to a range\r\n * @param value\r\n * @param min\r\n * @param max\r\n */\r\nexport function clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n\r\n/**\r\n * Recursively assign default values to an object if object is missing the keys.\r\n * @param object The destination object to assign default values to\r\n * @param defaults The default values for the object\r\n * @return The destination object\r\n */\r\nexport function defaultsDeep<T>(object: T, defaults: Partial<T>): T {\r\n for (const key in defaults) {\r\n if (defaults.hasOwnProperty(key)) {\r\n const value = object[key];\r\n\r\n if (typeof value === 'undefined') {\r\n object[key] = defaults[key];\r\n } else if (value !== null && typeof value === 'object') {\r\n object[key] = defaultsDeep(value, defaults[key]);\r\n }\r\n }\r\n }\r\n\r\n return object;\r\n}\r\n\r\n\r\n/**\r\n * Finds the first element in an array for that the comaperator functions returns true\r\n *\r\n * @export\r\n * @param array An array\r\n * @param compareFunction Comperator function returning true for the element seeked\r\n * @returns The found element or undefined\r\n */\r\nexport function findInArray<T>(array: Array<T>, compareFunction: (element: T) => boolean): T {\r\n if (isNil(array)) {\r\n return undefined;\r\n }\r\n for (let i = 0; i < array.length; i++) {\r\n if (compareFunction(array[i]) === true) {\r\n return array[i];\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\n\r\n/**\r\n * Finds the first index in an array for that the comaperator function for an element returns true\r\n *\r\n * @export\r\n * @param array An array of elements\r\n * @param compareFunction Comperator function returning true for the element seeked\r\n * @returns Index of the matched element or -1 if no element was found\r\n */\r\nexport function findIndexInArray<T>(array: Array<T>, compareFunction: (element: T) => boolean): number {\r\n if (isNil(array)) {\r\n return undefined;\r\n }\r\n for (let i = 0; i < array.length; i++) {\r\n if (compareFunction(array[i]) === true) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\n/**\r\n * If points number is less than minNumPoints, show radius for all points.\r\n */\r\nexport function changePointRadius(chart, options): void {\r\n if (chart && chart.data && chart.data.datasets && options) {\r\n let pointRadiusChangeFlag = false;\r\n const maxNumPointsToDraw = options.maxNumPointsToDraw == null ? 100 : options.maxNumPointsToDraw;\r\n for (const dataset of chart.data.datasets) {\r\n if (dataset.data.length < maxNumPointsToDraw) {\r\n pointRadiusChangeFlag = true;\r\n break;\r\n }\r\n }\r\n chart.options.elements.point.radius = pointRadiusChangeFlag ? 2 : 0;\r\n }\r\n}\r\n","/**\r\n * This plugin is adapted from: https://github.com/3dcl/chartjs-plugin-responsive-downsample\r\n * for controlling the radius of point.\r\n *\r\n * MIT License\r\n * Copyright (c) 2018 3D Content Logistics\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n * SOFTWARE.\r\n */\r\nimport { ChartPoint } from 'chart.js';\r\nimport * as utils from './utils';\r\n\r\n/**\r\n * A mipmap data structure for line chart data. Uses averages to downsample data.\r\n */\r\nexport class DataMipmap {\r\n protected minNumPoints: number;\r\n protected mipMaps: ChartPoint[][];\r\n protected originalData: ChartPoint[];\r\n protected resolution: number;\r\n\r\n /**\r\n * Create a data mipmap\r\n * @param data The orignal line chart data\r\n * @param minNumPoints Minimal number of points on lowest mipmap level(limits number of levels)\r\n */\r\n constructor(data: ChartPoint[], minNumPoints: number = 2) {\r\n this.minNumPoints = minNumPoints;\r\n this.setData(data);\r\n }\r\n\r\n /**\r\n * Set the line chart data and update mipmap level.\r\n * @param data The orignal line chart data\r\n */\r\n setData(data: ChartPoint[]): void {\r\n this.originalData = data || [];\r\n this.mipMaps = [];\r\n this.resolution = this.computeResolution(this.originalData);\r\n this.createMipMap();\r\n }\r\n\r\n /**\r\n * Set the minimal number of points\r\n * @param minNumPoints Minimal number of points on lowest mipmap level(limits number of levels)\r\n */\r\n setMinNumPoints(minNumPoints: number): void {\r\n this.minNumPoints = minNumPoints;\r\n this.mipMaps = [];\r\n this.createMipMap();\r\n }\r\n\r\n /**\r\n * Get the best fitting mipmap level for a certain scale resolution\r\n * @param resolution Desired resolution in ms per pixel\r\n */\r\n getMipMapForResolution(resolution: number): ChartPoint[] {\r\n return this.getMipMapLevel(this.getMipMapIndexForResolution(resolution));\r\n }\r\n\r\n /**\r\n * Computes the index of the best fitting mipmap level for a certain scale resolution\r\n * @param resolution Desired resolution in ms per pixel\r\n */\r\n getMipMapIndexForResolution(resolution: number): number {\r\n if (utils.isNil(resolution)) { return 0; }\r\n\r\n const factor = resolution / this.resolution;\r\n return utils.clamp(Math.floor(Math.log(factor) / Math.log(2.0)), 0, this.mipMaps.length - 1);\r\n }\r\n\r\n /**\r\n * Get a mipmap level by index\r\n * @param level The index of the mipmap level\r\n */\r\n getMipMapLevel(level: number): ChartPoint[] {\r\n return this.mipMaps[level];\r\n }\r\n\r\n /**\r\n * Get all mipmap level\r\n */\r\n getMipMaps(): ChartPoint[][] {\r\n return this.mipMaps;\r\n }\r\n\r\n /**\r\n * Get the number of available mipmap level\r\n */\r\n getNumLevel(): number {\r\n return this.mipMaps.length;\r\n }\r\n\r\n protected computeResolution(data: ChartPoint[]): number {\r\n let minTimeDistance = Infinity;\r\n\r\n for (let i = 0, end = this.originalData.length - 1; i < end; ++i) {\r\n const current = this.originalData[i];\r\n const next = this.originalData[i + 1];\r\n\r\n\r\n minTimeDistance = Math.min(\r\n Math.abs(this.getTime(current) - this.getTime(next)),\r\n minTimeDistance\r\n );\r\n }\r\n\r\n return minTimeDistance;\r\n }\r\n\r\n protected createMipMap(): void {\r\n let targetResolution = this.resolution;\r\n let targetLength = this.originalData.length;\r\n this.mipMaps.push(this.originalData);\r\n let lastMipMap = this.originalData;\r\n\r\n while (lastMipMap.length > this.minNumPoints) {\r\n targetResolution = targetResolution * 2;\r\n targetLength = Math.floor(targetLength * 0.5);\r\n lastMipMap = this.downsampleToResolution(lastMipMap, targetResolution, targetLength);\r\n this.mipMaps.push(lastMipMap);\r\n }\r\n }\r\n\r\n protected downsampleToResolution(\r\n data: ChartPoint[],\r\n targetResolution: number,\r\n targetLength: number\r\n ): ChartPoint[] {\r\n const output: ChartPoint[] = [];\r\n let aggregationValues: ChartPoint[] = [];\r\n let firstPoint = data[0];\r\n aggregationValues.push(firstPoint);\r\n\r\n for (let i = 1, end = data.length; i < end; ++i) {\r\n const currentPoint = data[i];\r\n const timeDistance = Math.abs(this.getTime(firstPoint) - this.getTime(currentPoint));\r\n\r\n if (timeDistance < targetResolution) {\r\n aggregationValues.push(currentPoint);\r\n } else {\r\n // create new sensor value in output\r\n const newPoint = this.getAverage(aggregationValues);\r\n output.push(newPoint);\r\n\r\n // reset aggregation data structure\r\n firstPoint = currentPoint;\r\n aggregationValues = [currentPoint];\r\n }\r\n }\r\n\r\n // insert last point\r\n output.push(this.getAverage(aggregationValues));\r\n\r\n return output;\r\n }\r\n\r\n protected getAverage(aggregationValues: ChartPoint[]): ChartPoint {\r\n const value = aggregationValues\r\n .map(point => point.y as number)\r\n .reduce((previous, current) => previous + current)\r\n / aggregationValues.length;\r\n\r\n return {\r\n x: aggregationValues[0].x || aggregationValues[0].t,\r\n y: value\r\n };\r\n }\r\n\r\n protected getTime(point: ChartPoint): number {\r\n const x = point.x || point.t;\r\n\r\n if (typeof x === 'number') {\r\n return x;\r\n } else if (typeof x === 'string') {\r\n return new Date(x).getTime();\r\n } else {\r\n return x.getTime();\r\n }\r\n }\r\n}\r\n","/**\r\n * This plugin is adapted from: https://github.com/3dcl/chartjs-plugin-responsive-downsample\r\n * for controlling the radius of point.\r\n *\r\n * MIT License\r\n * Copyright (c) 2018 3D Content Logistics\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n * SOFTWARE.\r\n */\r\nimport { ChartPoint } from 'chart.js';\r\nimport * as utils from './utils';\r\nimport { DataMipmap } from './data_mipmap';\r\n\r\n/**\r\n * A mipmap data structure that uses Largest-Triangle-Three-Buckets algorithm to downsample data\r\n */\r\nexport class LTTBDataMipmap extends DataMipmap {\r\n protected resolutions: number[];\r\n\r\n getMipMapIndexForResolution(resolution: number): number {\r\n if (utils.isNil(resolution)) { return 0; }\r\n\r\n let index = utils.findIndexInArray(this.resolutions, (levelResolution) => levelResolution >= resolution);\r\n if (index === -1) {\r\n // use smallest mipmap as fallback\r\n index = this.resolutions.length - 1;\r\n }\r\n\r\n return index;\r\n }\r\n\r\n protected createMipMap(): void {\r\n super.createMipMap();\r\n this.resolutions = this.mipMaps.map((level) => this.computeAverageResolution(level));\r\n }\r\n\r\n /**\r\n * This method is adapted from: https://github.com/sveinn-steinarsson/flot-downsample\r\n *\r\n * The MIT License\r\n * Copyright (c) 2013 by Sveinn Steinarsson\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * The above copyright notice and this permission notice shall be included in\r\n * all copies or substantial portions of the Software.\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n * THE SOFTWARE.\r\n */\r\n protected downsampleToResolution(\r\n data: ChartPoint[],\r\n targetResolution: number,\r\n targetLength: number\r\n ) {\r\n const dataLength = data.length;\r\n if (targetLength >= dataLength || targetLength === 0) {\r\n return data; // data has target size\r\n }\r\n\r\n const output: ChartPoint[] = [];\r\n\r\n // bucket size, leave room for start and end data points\r\n const bucksetSize = (dataLength - 2) / (targetLength - 2);\r\n\r\n let a = 0; // initially a is the first point in the triangle\r\n let maxAreaPoint: ChartPoint;\r\n let maxArea: number;\r\n let area: number;\r\n let nextA: number;\r\n\r\n // always add the first point\r\n output.push(data[a]);\r\n\r\n for (let i = 0; i < targetLength - 2; ++i) {\r\n // Calculate point average for next bucket (containing c)\r\n let avgX = 0;\r\n let avgY = 0;\r\n let avgRangeStart = Math.floor((i + 1) * bucksetSize) + 1;\r\n let avgRangeEnd = Math.floor((i + 2) * bucksetSize) + 1;\r\n avgRangeEnd = avgRangeEnd < dataLength ? avgRangeEnd : dataLength;\r\n\r\n const avgRangeLength = avgRangeEnd - avgRangeStart;\r\n\r\n for (; avgRangeStart < avgRangeEnd; avgRangeStart++) {\r\n avgX += this.getTime(data[avgRangeStart]);\r\n avgY += data[avgRangeStart].y as number * 1;\r\n }\r\n avgX /= avgRangeLength;\r\n avgY /= avgRangeLength;\r\n\r\n // Get the range for this bucket\r\n let rangeOffs = Math.floor((i + 0) * bucksetSize) + 1;\r\n const rangeTo = Math.floor((i + 1) * bucksetSize) + 1;\r\n\r\n // Point a\r\n const pointA = data[a];\r\n const pointAX = this.getTime(pointA);\r\n const pointAY = pointA.y as number * 1;\r\n\r\n maxArea = area = -1;\r\n\r\n for (; rangeOffs < rangeTo; rangeOffs++) {\r\n // Calculate triangle area over three buckets\r\n area = Math.abs((pointAX - avgX) * (data[rangeOffs].y as number - pointAY) -\r\n (pointAX - this.getTime(data[rangeOffs])) * (avgY - pointAY)\r\n ) * 0.5;\r\n\r\n if (area > maxArea) {\r\n maxArea = area;\r\n maxAreaPoint = data[rangeOffs];\r\n nextA = rangeOffs; // Next a is this b\r\n }\r\n }\r\n\r\n output.push(maxAreaPoint); // Pick this point from the bucket\r\n a = nextA; // This a is the next a (chosen b)\r\n }\r\n\r\n output.push(data[dataLength - 1]); // Always add last\r\n\r\n return output;\r\n }\r\n\r\n protected computeAverageResolution(data: ChartPoint[]): number {\r\n let timeDistances = 0;\r\n\r\n for (let i = 0, end = this.originalData.length - 1; i < end; ++i) {\r\n const current = this.originalData[i];\r\n const next = this.originalData[i + 1];\r\n\r\n timeDistances += Math.abs(this.getTime(current) - this.getTime(next));\r\n }\r\n return timeDistances / (data.length - 1);\r\n }\r\n}\r\n","/**\r\n * This plugin is adapted from: https://github.com/3dcl/chartjs-plugin-responsive-downsample\r\n * for controlling the radius of point.\r\n *\r\n * MIT License\r\n * Copyright (c) 2018 3D Content Logistics\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n * SOFTWARE.\r\n */\r\nimport { ChartPoint } from 'chart.js';\r\nimport { Scale } from './chartjs_ext';\r\nimport moment from 'moment';\r\nimport * as utils from './utils';\r\n\r\nexport type XValue = number | string | Date | moment.Moment;\r\nexport type Range = [XValue, XValue];\r\n\r\nfunction getCompareValue(value: XValue): number {\r\n if (typeof value === 'number') {\r\n return value;\r\n } else if (typeof value === 'string') {\r\n return (new Date(value)).getTime();\r\n } else if (value instanceof Date) {\r\n return value.getTime();\r\n } else {\r\n return moment(value).toDate().getTime();\r\n }\r\n}\r\n\r\nexport function rangeIsEqual(previousValue: Range, currentValue: Range): boolean {\r\n if (utils.isNil(previousValue) ||\r\n utils.isNil(currentValue) ||\r\n utils.isNil(previousValue[0]) ||\r\n utils.isNil(previousValue[1]) ||\r\n utils.isNil(currentValue[0]) ||\r\n utils.isNil(currentValue[1])\r\n ) {\r\n return false;\r\n }\r\n\r\n previousValue = [getCompareValue(previousValue[0]), getCompareValue(previousValue[1])];\r\n currentValue = [getCompareValue(currentValue[0]), getCompareValue(currentValue[1])];\r\n\r\n return previousValue[0] === currentValue[0] && previousValue[1] === currentValue[1];\r\n}\r\n\r\nexport function getScaleRange(scale: Scale): Range {\r\n if (utils.isNil(scale)) {\r\n return [null, null];\r\n }\r\n\r\n const start = scale.getValueForPixel(scale.left);\r\n const end = scale.getValueForPixel(scale.right);\r\n\r\n return [start, end];\r\n}\r\n\r\nexport function cullData(data: ChartPoint[], range: Range): ChartPoint[] {\r\n const startValue = getCompareValue(range[0]);\r\n const endValue = getCompareValue(range[1]);\r\n let startIndex = 0;\r\n let endIndex = data.length;\r\n\r\n for (let i = 1; i < data.length; ++i) {\r\n const point = data[i];\r\n const compareValue = getCompareValue(point.x || point.t);\r\n\r\n if (compareValue <= startValue) {\r\n startIndex = i;\r\n }\r\n\r\n if (compareValue >= endValue) {\r\n endIndex = i + 1;\r\n break;\r\n }\r\n }\r\n\r\n return data.slice(startIndex, endIndex);\r\n}\r\n","/**\r\n * This plugin is adapted from: https://github.com/3dcl/chartjs-plugin-responsive-downsample\r\n * for controlling the radius of point.\r\n *\r\n * MIT License\r\n * Copyright (c) 2018 3D Content Logistics\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n * SOFTWARE.\r\n */\r\nimport moment from 'moment';\r\nimport { Chart, ChartDataSets, ChartPoint } from 'chart.js';\r\nimport { IChartPlugin, TimeScale } from './chartjs_ext';\r\nimport * as utils from './utils';\r\n\r\nimport { DataMipmap } from './data_mipmap';\r\nimport { LTTBDataMipmap } from './lttb_data_mipmap';\r\nimport * as data_culling from './data_culling';\r\n\r\ninterface MipMapDataSets extends ChartDataSets {\r\n originalData?: ChartPoint[];\r\n currentMipMapLevel?: number;\r\n mipMap?: DataMipmap;\r\n}\r\n\r\nexport interface ResponsiveDownsamplePluginOptions {\r\n /**\r\n * Enable/disable plugin\r\n */\r\n enabled?: boolean;\r\n /**\r\n * The aggregation algorithm to thin out data. Default: LTTB\r\n */\r\n aggregationAlgorithm?: 'AVG' | 'LTTB';\r\n /**\r\n * Desired minimal distance between data points in pixels. Default: 1 pixel\r\n */\r\n desiredDataPointDistance?: number;\r\n /**\r\n * Minimal number of data points. Limits\r\n */\r\n minNumPoints?: number;\r\n /**\r\n * Cull data to displayed range of x scale\r\n */\r\n cullData?: boolean;\r\n /**\r\n * Flag is set by plugin to trigger reload of data\r\n */\r\n needsUpdate?: boolean;\r\n /**\r\n * Current target resolution(Set by plugin)\r\n */\r\n targetResolution?: number;\r\n /**\r\n * Scale range of x axis\r\n */\r\n scaleRange?: data_culling.Range;\r\n /**\r\n * Draw points only if the points number less than the limitation\r\n */\r\n maxNumPointsToDraw?: number;\r\n}\r\n\r\n// Using dynamic flag to fix the issue of ng-packagr #696: Lambda not supported\r\n// @dynamic\r\n/**\r\n * Chart js Plugin for downsampling data\r\n */\r\nexport class ResponsiveDownsamplePlugin implements IChartPlugin {\r\n static getPluginOptions(chart: any): ResponsiveDownsamplePluginOptions {\r\n const options: ResponsiveDownsamplePluginOptions = chart.options.responsiveDownsample || {};\r\n utils.defaultsDeep(options, {\r\n enabled: false,\r\n aggregationAlgorithm: 'LTTB',\r\n desiredDataPointDistance: 1,\r\n minNumPoints: 100,\r\n maxNumPointsToDraw: 100,\r\n cullData: true\r\n });\r\n\r\n if (options.enabled) {\r\n chart.options.responsiveDownsample = options;\r\n }\r\n\r\n return options;\r\n }\r\n\r\n static hasDataChanged(chart: Chart): boolean {\r\n return !utils.isNil(\r\n utils.findInArray(\r\n chart.data.datasets as MipMapDataSets[],\r\n (dataset) => {\r\n return utils.isNil(dataset.mipMap);\r\n }\r\n )\r\n );\r\n }\r\n\r\n static createDataMipMap(chart: Chart, options: ResponsiveDownsamplePluginOptions): void {\r\n chart.data.datasets.forEach((dataset: MipMapDataSets) => {\r\n // @ts-ignore\r\n const data = !utils.isNil(dataset.originalData) ? dataset.originalData : dataset.data as ChartPoint[];\r\n\r\n const mipMap = (options.aggregationAlgorithm === 'LTTB')\r\n ? new LTTBDataMipmap(data, options.minNumPoints)\r\n : new DataMipmap(data, options.minNumPoints);\r\n\r\n dataset.originalData = data;\r\n dataset.mipMap = mipMap;\r\n // @ts-ignore\r\n dataset.data = mipMap.getMipMapLevel(mipMap.getNumLevel() - 1); // set last level for first render pass\r\n });\r\n }\r\n\r\n static restoreOriginalData(chart: Chart): boolean {\r\n let updated = false;\r\n\r\n chart.data.datasets.forEach((dataset: MipMapDataSets) => {\r\n // @ts-ignore\r\n if (!utils.isNil(dataset.originalData) && dataset.data !== dataset.originalData) {\r\n // @ts-ignore\r\n dataset.data = dataset.originalData;\r\n updated = true;\r\n }\r\n });\r\n\r\n return updated;\r\n }\r\n\r\n static getTargetResolution(chart: Chart, options: ResponsiveDownsamplePluginOptions): number {\r\n const xScale: TimeScale = (chart as any).scales['x-axis-0'];\r\n\r\n if (utils.isNil(xScale)) {\r\n return null;\r\n }\r\n\r\n const start = moment(xScale.getValueForPixel(xScale.left) as any);\r\n const end = moment(xScale.getValueForPixel(xScale.left + 1) as any);\r\n const targetResolution = end.diff(start);\r\n\r\n return targetResolution * options.desiredDataPointDistance;\r\n }\r\n\r\n static updateMipMap(chart: Chart, options: ResponsiveDownsamplePluginOptions, rangeChanged: boolean): boolean {\r\n let updated = false;\r\n\r\n chart.data.datasets.forEach((dataset: MipMapDataSets) => {\r\n const mipMap = dataset.mipMap;\r\n if (utils.isNil(mipMap)) {\r\n return;\r\n }\r\n\r\n const mipMalLevel = mipMap.getMipMapIndexForResolution(options.targetResolution);\r\n if (mipMalLevel === dataset.currentMipMapLevel && !rangeChanged) {\r\n // skip update if mip map level and data range did not change\r\n return;\r\n }\r\n updated = true;\r\n dataset.currentMipMapLevel = mipMalLevel;\r\n\r\n let newData = mipMap.getMipMapLevel(mipMalLevel);\r\n if (options.cullData) {\r\n newData = data_culling.cullData(newData, options.scaleRange);\r\n }\r\n\r\n // @ts-ignore\r\n dataset.data = newData;\r\n });\r\n\r\n return updated;\r\n }\r\n\r\n beforeInit(chart: Chart): void {\r\n const options = ResponsiveDownsamplePlugin.getPluginOptions(chart);\r\n if (!options.enabled) { return; }\r\n\r\n ResponsiveDownsamplePlugin.createDataMipMap(chart, options);\r\n options.needsUpdate = true;\r\n }\r\n\r\n beforeDatasetsUpdate(chart: Chart): void {\r\n const options = ResponsiveDownsamplePlugin.getPluginOptions(chart);\r\n if (!options.enabled) {\r\n // restore original data and remove state from options\r\n options.needsUpdate = ResponsiveDownsamplePlugin.restoreOriginalData(chart);\r\n delete options.targetResolution;\r\n delete options.scaleRange;\r\n return;\r\n }\r\n\r\n // only update mip map if data set was reloaded externally\r\n if (ResponsiveDownsamplePlugin.hasDataChanged(chart)) {\r\n ResponsiveDownsamplePlugin.createDataMipMap(chart, options);\r\n options.needsUpdate = true;\r\n }\r\n }\r\n\r\n beforeRender(chart: Chart): boolean {\r\n const options = ResponsiveDownsamplePlugin.getPluginOptions(chart);\r\n if (!options.enabled) {\r\n // update chart if data was restored from original data\r\n if (options.needsUpdate) {\r\n options.needsUpdate = false;\r\n chart.update(0);\r\n\r\n return false;\r\n }\r\n return;\r\n }\r\n\r\n const targetResolution = ResponsiveDownsamplePlugin.getTargetResolution(chart, options);\r\n const xScale: TimeScale = (chart as any).scales['x-axis-0'];\r\n const scaleRange = data_culling.getScaleRange(xScale);\r\n const rangeChanged = !data_culling.rangeIsEqual(options.scaleRange, scaleRange);\r\n\r\n if (options.needsUpdate ||\r\n options.targetResolution !== targetResolution ||\r\n rangeChanged\r\n ) {\r\n options.targetResolution = targetResolution;\r\n options.scaleRange = scaleRange;\r\n options.needsUpdate = false;\r\n\r\n if (ResponsiveDownsamplePlugin.updateMipMap(chart, options, rangeChanged)) {\r\n utils.changePointRadius(chart, options);\r\n // update chart and cancel current render\r\n chart.update(0);\r\n\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","/**\r\n * This plugin is adapted from: https://github.com/3dcl/chartjs-plugin-responsive-downsample\r\n * for controlling the radius of point.\r\n *\r\n * MIT License\r\n * Copyright (c) 2018 3D Content Logistics\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n * SOFTWARE.\r\n */\r\nimport * as chartjs from 'chart.js';\r\nconst Chart = window && (window as any).Chart ? (window as any).Chart : chartjs.Chart;\r\n\r\nimport { ResponsiveDownsamplePlugin, ResponsiveDownsamplePluginOptions } from './responsive_downsample_plugin';\r\nexport { ResponsiveDownsamplePlugin, ResponsiveDownsamplePluginOptions } from './responsive_downsample_plugin';\r\n\r\n\r\n// comment this because this plugin is only used internally, merge ChartOptions interface is unnecessary\r\n// and causes build error: \"error TS2665: Invalid module name in augmentation.\".\r\n// // Extend chart.js options interface\r\n// declare module 'chart.js' {\r\n// interface ChartOptions {\r\n// /**\r\n// * Options for responsive downsample plugin\r\n// */\r\n// responsiveDownsample?: ResponsiveDownsamplePluginOptions;\r\n// }\r\n// }\r\n\r\nChart.pluginService.register(new ResponsiveDownsamplePlugin());\r\n","/**\r\n * this plugin is adapted from: https://github.com/chartjs/chartjs-plugin-zoom\r\n * for following two open issues:\r\n * https://github.com/chartjs/chartjs-plugin-zoom/pull/155\r\n * https://github.com/chartjs/chartjs-plugin-zoom/pull/150\r\n *\r\n * The MIT License (MIT) Copyright (c) 2013-2016 Nick Downie\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this\r\n * software and associated documentation files (the \"Software\"), to deal in the Software\r\n * without restriction, including without limitation the rights to use, copy, modify, merge,\r\n * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\r\n * to whom the Software is furnished to do so, subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all copies or\r\n * substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\r\n * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE\r\n * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\r\n * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n * THE SOFTWARE.\r\n */\r\n\r\n/*jslint browser:true, devel:true, white:true, vars:true */\r\n/*global require*/\r\n\r\n// hammer JS for touch support\r\nimport * as hammerjs from 'hammerjs';\r\nconst Hammer = window && (window as any).Hammer ? (window as any).Hammer : hammerjs.Hammer;\r\n\r\n// Get the chart variable\r\nimport * as chartjs from 'chart.js';\r\nconst Chart = window && (window as any).Chart ? (window as any).Chart : chartjs.Chart;\r\n\r\nconst helpers = Chart.helpers;\r\n\r\n// Take the zoom namespace of Chart\r\nconst zoomNS = Chart.Zoom = Chart.Zoom || {};\r\n\r\n// Where we store functions to handle different scale types\r\nconst zoomFunctions = zoomNS.zoomFunctions = zoomNS.zoomFunctions || {};\r\nconst panFunctions = zoomNS.panFunctions = zoomNS.panFunctions || {};\r\n\r\n// Default options if none are provided\r\nconst defaultOptions = zoomNS.defaults = {\r\n pan: {\r\n enabled: true,\r\n mode: 'xy',\r\n speed: 20,\r\n threshold: 10\r\n },\r\n zoom: {\r\n enabled: true,\r\n mode: 'xy',\r\n sensitivity: 3\r\n }\r\n};\r\n\r\nfunction directionEnabled(mode, dir) {\r\n if (mode === undefined) {\r\n return true;\r\n } else if (typeof mode === 'string') {\r\n return mode.indexOf(dir) !== -1;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction rangeMaxLimiter(zoomPanOptions, newMax) {\r\n if (zoomPanOptions.scaleAxes && zoomPanOptions.rangeMax &&\r\n !helpers.isNullOrUndef(zoomPanOptions.rangeMax[zoomPanOptions.scaleAxes])) {\r\n const rangeMax = zoomPanOptions.rangeMax[zoomPanOptions.scaleAxes];\r\n if (newMax > rangeMax) {\r\n newMax = rangeMax;\r\n }\r\n }\r\n return newMax;\r\n}\r\n\r\nfunction rangeMinLimiter(zoomPanOptions, newMin) {\r\n if (zoomPanOptions.scaleAxes && zoomPanOptions.rangeMin &&\r\n !helpers.isNullOrUndef(zoomPanOptions.rangeMin[zoomPanOptions.scaleAxes])) {\r\n const rangeMin = zoomPanOptions.rangeMin[zoomPanOptions.scaleAxes];\r\n if (newMin < rangeMin) {\r\n newMin = rangeMin;\r\n }\r\n }\r\n return newMin;\r\n}\r\n\r\nfunction zoomIndexScale(scale, zoom, center, zoomOptions) {\r\n const labels = scale.chart.data.labels;\r\n let minIndex = scale.minIndex;\r\n const lastLabelIndex = labels.length - 1;\r\n let maxIndex = scale.maxIndex;\r\n const sensitivity = zoomOptions.sensitivity;\r\n const chartCenter = scale.isHorizontal() ? scale.left + (scale.width / 2) : scale.top + (scale.height / 2);\r\n const centerPointer = scale.isHorizontal() ? center.x : center.y;\r\n\r\n zoomNS.zoomCumulativeDelta = zoom > 1 ? zoomNS.zoomCumulativeDelta + 1 : zoomNS.zoomCumulativeDelta - 1;\r\n\r\n if (Math.abs(zoomNS.zoomCumulativeDelta) > sensitivity) {\r\n if (zoomNS.zoomCumulativeDelta < 0) {\r\n if (centerPointer >= chartCenter) {\r\n if (minIndex <= 0) {\r\n maxIndex = Math.min(lastLabelIndex, maxIndex + 1);\r\n } else {\r\n minIndex = Math.max(0, minIndex - 1);\r\n }\r\n } else if (centerPointer < chartCenter) {\r\n if (maxIndex >= lastLabelIndex) {\r\n minIndex = Math.max(0, minIndex - 1);\r\n } else {\r\n maxIndex = Math.min(lastLabelIndex, maxIndex + 1);\r\n }\r\n }\r\n zoomNS.zoomCumulativeDelta = 0;\r\n } else if (zoomNS.zoomCumulativeDelta > 0) {\r\n if (centerPointer >= chartCenter) {\r\n minIndex = minIndex < maxIndex ? minIndex = Math.min(maxIndex, minIndex + 1) : minIndex;\r\n } else if (centerPointer < chartCenter) {\r\n maxIndex = maxIndex > minIndex ? maxIndex = Math.max(minIndex, maxIndex - 1) : maxIndex;\r\n }\r\n zoomNS.zoomCumulativeDelta = 0;\r\n }\r\n scale.options.ticks.min = rangeMinLimiter(zoomOptions, labels[minIndex]);\r\n scale.options.ticks.max = rangeMaxLimiter(zoomOptions, labels[maxIndex]);\r\n }\r\n}\r\n\r\nfunction zoomTimeScale(scale, zoom, center, zoomOptions) {\r\n const options = scale.options;\r\n\r\n // var range;\r\n // var min_percent;\r\n // if (scale.isHorizontal()) {\r\n // range = scale.right - scale.left;\r\n // min_percent = (center.x - scale.left) / range;\r\n // } else {\r\n // range = scale.bottom - scale.top;\r\n // min_percent = (center.y - scale.top) / range;\r\n // }\r\n //\r\n // var max_percent = 1 - min_percent;\r\n const range = scale.max - scale.min;\r\n const newDiff = range * (zoom - 1);\r\n\r\n const cursorPixel = scale.isHorizontal() ? center.x : center.y;\r\n const min_percent = (scale.getValueForPixel(cursorPixel) - scale.min) / range;\r\n const max_percent = 1 - min_percent;\r\n\r\n const minDelta = newDiff * min_percent;\r\n const maxDelta = newDiff * max_percent;\r\n\r\n const newMin = scale.min + minDelta;\r\n const newMax = scale.max - maxDelta;\r\n\r\n const diffMinMax = newMax - newMin;\r\n const minLimitExceeded = rangeMinLimiter(zoomOptions, diffMinMax) !== diffMinMax;\r\n const maxLimitExceeded = rangeMaxLimiter(zoomOptions, diffMinMax) !== diffMinMax;\r\n\r\n if (!minLimitExceeded && !maxLimitExceeded) {\r\n options.time.min = newMin;\r\n options.time.max = newMax;\r\n }\r\n}\r\n\r\nfunction zoomNumericalScale(scale, zoom, center, zoomOptions) {\r\n const range = scale.max - scale.min;\r\n const newDiff = range * (zoom - 1);\r\n\r\n const cursorPixel = scale.isHorizontal() ? center.x : center.y;\r\n const min_percent = (scale.getValueForPixel(cursorPixel) - scale.min) / range;\r\n const max_percent = 1 - min_percent;\r\n\r\n const minDelta = newDiff * min_percent;\r\n const maxDelta = newDiff * max_percent;\r\n\r\n scale.options.ticks.min = rangeMinLimiter(zoomOptions, scale.min + minDelta);\r\n scale.options.ticks.max = rangeMaxLimiter(zoomOptions, scale.max - maxDelta);\r\n}\r\n\r\nfunction zoomScale(scale, zoom, center, zoomOptions) {\r\n const fn = zoomFunctions[scale.options.type];\r\n if (fn) {\r\n fn(scale, zoom, center, zoomOptions);\r\n }\r\n}\r\n\r\nfunction doZoom(chartInstance, zoom, center, whichAxes?) {\r\n const ca = chartInstance.chartArea;\r\n if (!center) {\r\n center = {\r\n x: (ca.left + ca.right) / 2,\r\n y: (ca.top + ca.bottom) / 2,\r\n };\r\n }\r\n\r\n const zoomOptions = chartInstance.options.zoom;\r\n\r\n if (zoomOptions && helpers.getValueOrDefault(zoomOptions.enabled, defaultOptions.zoom.enabled)) {\r\n // Do the zoom here\r\n const zoomMode = helpers.getValueOrDefault(chartInstance.options.zoom.mode, defaultOptions.zoom.mode);\r\n zoomOptions.sensitivity = helpers.getValueOrDefault(chartInstance.options.zoom.sensitivity, defaultOptions.zoom.sensitivity);\r\n\r\n // Which axe should be modified when figers were used.\r\n let _whichAxes;\r\n if (zoomMode === 'xy' && whichAxes !== undefined) {\r\n // based on fingers positions\r\n _whichAxes = whichAxes;\r\n } else {\r\n // no effect\r\n _whichAxes = 'xy';\r\n }\r\n\r\n helpers.each(chartInstance.scales, function(scale, id) {\r\n if (scale.isHorizontal() && directionEnabled(zoomMode, 'x') && directionEnabled(_whichAxes, 'x')) {\r\n zoomOptions.scaleAxes = 'x';\r\n zoomScale(scale, zoom, center, zoomOptions);\r\n } else if (!scale.isHorizontal() && directionEnabled(zoomMode, 'y') && directionEnabled(_whichAxes, 'y')) {\r\n // Do Y zoom\r\n zoomOptions.scaleAxes = 'y';\r\n zoomScale(scale, zoom, center, zoomOptions);\r\n }\r\n });\r\n\r\n chartInstance.update(0);\r\n if (typeof zoomOptions.onZoom === 'function') {\r\n zoomOptions.onZoom();\r\n }\r\n }\r\n}\r\n\r\nfunction panIndexScale(scale, delta, panOptions) {\r\n const labels = scale.chart.data.labels;\r\n const lastLabelIndex = labels.length - 1;\r\n const offsetAmt = Math.max((scale.ticks.length - ((scale.options.gridLines.offsetGridLines) ? 0 : 1)), 1);\r\n const panSpeed = panOptions.speed;\r\n let minIndex = scale.minIndex;\r\n const step = Math.round(scale.width / (offsetAmt * panSpeed));\r\n let maxIndex;\r\n\r\n zoomNS.panCumulativeDelta += delta;\r\n\r\n minIndex = zoomNS.panCumulativeDelta > step ? Math.max(0, minIndex - 1) : zoomNS.panCumulativeDelta < -step ? Math.min(lastLabelIndex - offsetAmt + 1, minIndex + 1) : minIndex;\r\n zoomNS.panCumulativeDelta = minIndex !== scale.minIndex ? 0 : zoomNS.panCumulativeDelta;\r\n\r\n maxIndex = Math.min(lastLabelIndex, minIndex + offsetAmt - 1);\r\n\r\n scale.options.ticks.min = rangeMinLimiter(panOptions, labels[minIndex]);\r\n scale.options.ticks.max = rangeMaxLimiter(panOptions, labels[maxIndex]);\r\n}\r\n\r\nfunction panTimeScale(scale, delta, panOptions) {\r\n const options = scale.options;\r\n const limitedMax = rangeMaxLimiter(panOptions, scale.getValueForPixel(scale.getPixelForValue(scale.max) - delta));\r\n const limitedMin = rangeMinLimiter(panOptions, scale.getValueForPixel(scale.getPixelForValue(scale.min) - delta));\r\n\r\n const limitedTimeDelta = delta < 0 ? limitedMax - scale.max : limitedMin - scale.min;\r\n\r\n options.time.max = scale.max + limitedTimeDelta;\r\n options.time.min = scale.min + limitedTimeDelta;\r\n}\r\n\r\nfunction panNumericalScale(scale, delta, panOptions) {\r\n const tickOpts = scale.options.ticks;\r\n const start = scale.start,\r\n end = scale.end;\r\n\r\n if (tickOpts.reverse) {\r\n tickOpts.max = scale.getValueForPixel(scale.getPixelForValue(start) - delta);\r\n tickOpts.min = scale.getValueForPixel(scale.getPixelForValue(end) - delta);\r\n } else {\r\n tickOpts.min = scale.getValueForPixel(scale.getPixelForValue(start) - delta);\r\n tickOpts.max = scale.getValueForPixel(scale.getPixelForValue(end) - delta);\r\n }\r\n tickOpts.min = rangeMinLimiter(panOptions, tickOpts.min);\r\n tickOpts.max = rangeMaxLimiter(panOptions, tickOpts.max);\r\n}\r\n\r\nfunction panScale(scale, delta, panOptions) {\r\n const fn = panFunctions[scale.options.type];\r\n if (fn) {\r\n fn(scale, delta, panOptions);\r\n }\r\n}\r\n\r\nfunction doPan(chartInstance, deltaX, deltaY) {\r\n const panOptions = chartInstance.options.pan;\r\n if (panOptions && helpers.getValueOrDefault(panOptions.enabled, defaultOptions.pan.enabled)) {\r\n const panMode = helpers.getValueOrDefault(chartInstance.options.pan.mode, defaultOptions.pan.mode);\r\n panOptions.speed = helpers.getValueOrDefault(chartInstance.options.pan.speed, defaultOptions.pan.speed);\r\n\r\n helpers.each(chartInstance.scales, function(scale, id) {\r\n if (scale.isHorizontal() && directionEnabled(panMode, 'x') && deltaX !== 0) {\r\n panOptions.scaleAxes = 'x';\r\n panScale(scale, deltaX, panOptions);\r\n } else if (!scale.isHorizontal() && directionEnabled(panMode, 'y') && deltaY !== 0) {\r\n panOptions.scaleAxes = 'y';\r\n panScale(scale, deltaY, panOptions);\r\n }\r\n });\r\n\r\n chartInstance.update(0);\r\n if (typeof panOptions.onPan === 'function') {\r\n panOptions.onPan();\r\n }\r\n }\r\n}\r\n\r\nfunction positionInChartArea(chartInstance, position) {\r\n return (position.x >= chartInstance.chartArea.left && position.x <= chartInstance.chartArea.right) &&\r\n (position.y >= chartInstance.chartArea.top && position.y <= chartInstance.chartArea.bottom);\r\n}\r\n\r\nfunction getYAxis(chartInstance) {\r\n const scales = chartInstance.scales;\r\n\r\n for (const scaleId in scales) {\r\n if (scales.hasOwnProperty(scaleId)) {\r\n const scale = scales[scaleId];\r\n if (!scale.isHorizontal()) {\r\n return scale;\r\n }\r\n }\r\n }\r\n}\r\n\r\n// Store these for later\r\nzoomNS.zoomFunctions.category = zoomIndexScale;\r\nzoomNS.zoomFunctions.time = zoomTimeScale;\r\nzoomNS.zoomFunctions.linear = zoomNumericalScale;\r\nzoomNS.zoomFunctions.logarithmic = zoomNumericalScale;\r\nzoomNS.panFunctions.category = panIndexScale;\r\nzoomNS.panFunctions.time = panTimeScale;\r\nzoomNS.panFunctions.linear = panNumericalScale;\r\nzoomNS.panFunctions.logarithmic = panNumericalScale;\r\n// Globals for catergory pan and zoom\r\nzoomNS.panCumulativeDelta = 0;\r\nzoomNS.zoomCumulativeDelta = 0;\r\n\r\n// Chartjs Zoom Plugin\r\nexport const zoomPlugin = {\r\n afterInit: function(chartInstance) {\r\n helpers.each(chartInstance.scales, function(scale) {\r\n scale.originalOptions = helpers.clone(scale.options);\r\n });\r\n\r\n chartInstance.resetZoom = function() {\r\n helpers.each(chartInstance.scales, function(scale, id) {\r\n const timeOptions = scale.options.time;\r\n const tickOptions = scale.options.ticks;\r\n\r\n if (timeOptions) {\r\n timeOptions.min = scale.originalOptions.time.min;\r\n timeOptions.max = scale.originalOptions.time.max;\r\n }\r\n\r\n if (tickOptions) {\r\n tickOptions.min = scale.originalOptions.ticks.min;\r\n tickOptions.max = scale.originalOptions.ticks.max;\r\n }\r\n });\r\n\r\n helpers.each(chartInstance.data.datasets, function(dataset, id) {\r\n dataset._meta = null;\r\n });\r\n\r\n chartInstance.update();\r\n };\r\n\r\n },\r\n beforeInit: function(chartInstance) {\r\n chartInstance.zoom = {};\r\n\r\n const node = chartInstance.zoom.node = chartInstance.chart.ctx.canvas;\r\n\r\n const options = chartInstance.options;\r\n const panThreshold = helpers.getValueOrDefault(options.pan ? options.pan.threshold : undefined, zoomNS.defaults.pan.threshold);\r\n if (!options.zoom || !options.zoom.enabled) {\r\n return;\r\n }\r\n if (options.zoom.drag) {\r\n // Only want to zoom horizontal axis\r\n options.zoom.mode = 'x';\r\n\r\n chartInstance.zoom._mouseDownHandler = function(event) {\r\n chartInstance.zoom._dragZoomStart = event;\r\n };\r\n node.addEventListener('mousedown', chartInstance.zoom._mouseDownHandler);\r\n\r\n chartInstance.zoom._mouseMoveHandler = function(event) {\r\n if (chartInstance.zoom._dragZoomStart) {\r\n chartInstance.zoom._dragZoomEnd = event;\r\n chartInstance.update(0);\r\n }\r\n };\r\n node.addEventListener('mousemove', chartInstance.zoom._mouseMoveHandler);\r\n\r\n chartInstance.zoom._mouseUpHandler = function(event) {\r\n if (chartInstance.zoom._dragZoomStart) {\r\n const chartArea = chartInstance.chartArea;\r\n const yAxis = getYAxis(chartInstance);\r\n const beginPoint = chartInstance.zoom._dragZoomStart;\r\n const offsetX = beginPoint.target.getBoundingClientRect().left;\r\n const startX = Math.max(Math.min(beginPoint.clientX, event.clientX) - offsetX, chartArea.left);\r\n const endX = Math.min(Math.max(beginPoint.clientX, event.clientX) - offsetX, chartArea.right);\r\n const dragDistance = endX - startX;\r\n const chartDistance = chartArea.right - chartArea.left;\r\n const zoom = 1 + (chartDistance - dragDistance) / chartDistance;\r\n const centerX = chartArea.left + (startX - chartArea.left) / (zoom - 1);\r\n\r\n // Remove drag start and end before chart update to stop drawing selected area\r\n chartInstance.zoom._dragZoomStart = null;\r\n chartInstance.zoom._dragZoomEnd = null;\r\n\r\n if (dragDistance > 0) {\r\n doZoom(chartInstance, zoom, {\r\n x: centerX,\r\n y: (yAxis.bottom - yAxis.top) / 2,\r\n });\r\n }\r\n }\r\n };\r\n // node.addEventListener('mouseup', chartInstance.zoom._mouseUpHandler);\r\n node.ownerDocument.addEventListener('mouseup', chartInstance.zoom._mouseUpHandler);\r\n } else {\r\n chartInstance.zoom._wheelHandler = function(event) {\r\n const rect = event.target.getBoundingClientRect();\r\n const offsetX = event.clientX - rect.left;\r\n const offsetY = event.clientY - rect.top;\r\n\r\n const center = {\r\n x : offsetX,\r\n y : offsetY\r\n };\r\n\r\n if (event.deltaY < 0) {\r\n doZoom(chartInstance, 1.1, center);\r\n } else {\r\n doZoom(chartInstance, 0.909, center);\r\n }\r\n // Prevent the event from triggering the default behavior (eg. Content scrolling).\r\n event.preventDefault();\r\n };\r\n\r\n node.addEventListener('wheel', chartInstance.zoom._wheelHandler);\r\n }\r\n\r\n if (Hammer) {\r\n const mc = new Hammer.Manager(node);\r\n mc.add(new Hammer.Pinch());\r\n mc.add(new Hammer.Pan({\r\n threshold: panThreshold\r\n }));\r\n\r\n // Hammer reports the total scaling. We need the incremental amount\r\n let currentPinchScaling;\r\n const handlePinch = function (e) {\r\n const diff = 1 / (currentPinchScaling) * e.scale;\r\n const rect = e.target.getBoundingClientRect();\r\n const offsetX = e.center.x - rect.left;\r\n const offsetY = e.center.y - rect.top;\r\n const center = {\r\n x : offsetX,\r\n y : offsetY\r\n };\r\n\r\n // fingers position difference\r\n const x = Math.abs(e.pointers[0].clientX - e.pointers[1].clientX);\r\n const y = Math.abs(e.pointers[0].clientY - e.pointers[1].clientY);\r\n\r\n // diagonal fingers will change both (xy) axes\r\n const p = x / y;\r\n let xy;\r\n if (p > 0.3 && p < 1.7) {\r\n xy = 'xy';\r\n } else if (x > y) {\r\n // x axis\r\n xy = 'x';\r\n } else {\r\n // y axis\r\n xy = 'y';\r\n }\r\n\r\n doZoom(chartInstance, diff, center, xy);\r\n\r\n // Keep track of overall scale\r\n currentPinchScaling = e.scale;\r\n };\r\n\r\n mc.on('pinchstart', function(e) {\r\n currentPinchScaling = 1; // reset tracker\r\n });\r\n mc.on('pinch', handlePinch);\r\n mc.on('pinchend', function(e) {\r\n handlePinch(e);\r\n currentPinchScaling = null; // reset\r\n zoomNS.zoomCumulativeDelta = 0;\r\n });\r\n\r\n let currentDeltaX = null, currentDeltaY = null, panning = false;\r\n const handlePan = function (e) {\r\n if (currentDeltaX !== null && currentDeltaY !== null) {\r\n panning = true;\r\n const deltaX = e.deltaX - currentDeltaX;\r\n const deltaY = e.deltaY - currentDeltaY;\r\n currentDeltaX = e.deltaX;\r\n currentDeltaY = e.deltaY;\r\n doPan(chartInstance, deltaX, deltaY);\r\n }\r\n };\r\n\r\n mc.on('panstart', function(e) {\r\n currentDeltaX = 0;\r\n currentDeltaY = 0;\r\n handlePan(e);\r\n });\r\n mc.on('panmove', handlePan);\r\n mc.on('panend', function(e) {\r\n currentDeltaX = null;\r\n currentDeltaY = null;\r\n zoomNS.panCumulativeDelta = 0;\r\n setTimeout(function() { panning = false; }, 500);\r\n });\r\n\r\n chartInstance.zoom._ghostClickHandler = function(e) {\r\n if (panning) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n };\r\n node.addEventListener('click', chartInstance.zoom._ghostClickHandler);\r\n\r\n chartInstance._mc = mc;\r\n }\r\n },\r\n\r\n beforeDatasetsDraw: function(chartInstance) {\r\n const ctx = chartInstance.chart.ctx;\r\n const chartArea = chartInstance.chartArea;\r\n ctx.save();\r\n ctx.beginPath();\r\n\r\n if (chartInstance.zoom._dragZoomEnd) {\r\n const yAxis = getYAxis(chartInstance);\r\n const beginPoint = chartInstance.zoom._dragZoomStart;\r\n const endPoint = chartInstance.zoom._dragZoomEnd;\r\n const offsetX = beginPoint.target.getBoundingClientRect().left;\r\n const startX = Math.min(beginPoint.clientX, endPoint.clientX) - offsetX;\r\n const endX = Math.max(beginPoint.clientX, endPoint.clientX) - offsetX;\r\n const rectWidth = endX - startX;\r\n\r\n\r\n ctx.fillStyle = 'rgba(225,225,225,0.5)';\r\n ctx.lineWidth = 5;\r\n ctx.fillRect(startX, yAxis.top, rectWidth, yAxis.bottom - yAxis.top);\r\n }\r\n\r\n ctx.rect(chartArea.left, chartArea.top, chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\r\n ctx.clip();\r\n },\r\n\r\n afterDatasetsDraw: function(chartInstance) {\r\n chartInstance.chart.ctx.restore();\r\n },\r\n\r\n destroy: function(chartInstance) {\r\n if (chartInstance.zoom) {\r\n const options = chartInstance.options;\r\n const node = chartInstance.zoom.node;\r\n\r\n if (options.zoom && options.zoom.drag) {\r\n node.removeEventListener('mousedown', chartInstance.zoom._mouseDownHandler);\r\n node.removeEventListener('mousemove', chartInstance.zoom._mouseMoveHandler);\r\n // node.removeEventListener('mouseup', chartInstance.zoom._mouseUpHandler);\r\n node.ownerDocument.removeEventListener('mouseup', chartInstance.zoom._mouseUpHandler);\r\n } else {\r\n node.removeEventListener('wheel', chartInstance.zoom._wheelHandler);\r\n }\r\n\r\n if (Hammer) {\r\n node.removeEventListener('click', chartInstance.zoom._ghostClickHandler);\r\n }\r\n\r\n delete chartInstance.zoom;\r\n\r\n const mc = chartInstance._mc;\r\n if (mc) {\r\n mc.remove('pinchstart');\r\n mc.remove('pinch');\r\n mc.remove('pinchend');\r\n mc.remove('panstart');\r\n mc.remove('pan');\r\n mc.remove('panend');\r\n }\r\n }\r\n }\r\n};\r\n\r\nChart.pluginService.register(zoomPlugin);\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 '../utils/chartjs-downsample';\r\nimport '../utils/chartjs-zoom';\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})\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;\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 }).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 }\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 });\r\n });\r\n } else {\r\n if (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 }\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 }\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","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { OwlDateTimeModule, OwlNativeDateTimeModule } from '@danielmoncada/angular-datetime-picker';\r\nimport {\r\n NameServerHistoryComponent,\r\n ProgressBarComponent,\r\n FileDropInputComponent,\r\n TimezoneSelectorComponent,\r\n InstructionComponent,\r\n PortSelectorComponent,\r\n TimeRangeSelectorComponent,\r\n AlertModule\r\n} from './components';\r\nimport { SelectionTableModule } from 'ngx-selection-table';\r\nimport { DropdownListModule } from 'ngx-dropdown-list';\r\n\r\n@NgModule({\r\n declarations: [\r\n NameServerHistoryComponent,\r\n FileDropInputComponent,\r\n ProgressBarComponent,\r\n TimezoneSelectorComponent,\r\n PortSelectorComponent,\r\n InstructionComponent,\r\n TimeRangeSelectorComponent\r\n ],\r\n exports: [\r\n NameServerHistoryComponent\r\n ],\r\n imports: [\r\n AlertModule,\r\n SelectionTableModule,\r\n DropdownListModule,\r\n OwlDateTimeModule,\r\n OwlNativeDateTimeModule,\r\n CommonModule,\r\n FormsModule\r\n ],\r\n entryComponents: [],\r\n providers: [],\r\n bootstrap: []\r\n})\r\nexport class NameserverHistoryModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TimezoneSelectorService","i1.PortSelectorService","i1","i2","Chart","utils.isNil","utils.clamp","utils.findIndexInArray","moment","utils.defaultsDeep","utils.findInArray","data_culling.cullData","data_culling.getScaleRange","data_culling.rangeIsEqual","utils.changePointRadius","i1.FileService","i1.ChartService","i1.UIService","i2.FileDropInputComponent","i3.ProgressBarComponent","i4.TimeRangeSelectorComponent","i5.TimezoneSelectorComponent","i6.PortSelectorComponent","i7.InstructionComponent","i9.AlertComponent","i10"],"mappings":"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"}
|