{"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()\">&times;</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}}&nbsp;\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()\">&times;</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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"}