ngx-hana-nameserver-history-viewer 1.2.1 → 21.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/{fesm2020 → fesm2022}/ngx-hana-nameserver-history-viewer.mjs +3925 -3980
- package/fesm2022/ngx-hana-nameserver-history-viewer.mjs.map +1 -0
- package/ngx-hana-nameserver-history-viewer-21.0.0.tgz +0 -0
- package/package.json +17 -25
- package/types/ngx-hana-nameserver-history-viewer.d.ts +534 -0
- package/esm2020/ngx-hana-nameserver-history-viewer.mjs +0 -5
- package/esm2020/public-api.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/components/alert/alert.component.mjs +0 -68
- package/esm2020/src/nameserver-history-viewer/components/alert/alert.module.mjs +0 -22
- package/esm2020/src/nameserver-history-viewer/components/alert/index.mjs +0 -3
- package/esm2020/src/nameserver-history-viewer/components/file-drop-input/file-drop-input.component.mjs +0 -112
- package/esm2020/src/nameserver-history-viewer/components/file-drop-input/index.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/components/index.mjs +0 -9
- package/esm2020/src/nameserver-history-viewer/components/instruction/index.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/components/instruction/instruction.component.mjs +0 -42
- package/esm2020/src/nameserver-history-viewer/components/nameserver-history.component.mjs +0 -557
- package/esm2020/src/nameserver-history-viewer/components/port-selector/index.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/components/port-selector/port-selector.component.mjs +0 -69
- package/esm2020/src/nameserver-history-viewer/components/port-selector/port-selector.service.mjs +0 -41
- package/esm2020/src/nameserver-history-viewer/components/progress-bar/index.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/components/progress-bar/progress-bar.component.mjs +0 -40
- package/esm2020/src/nameserver-history-viewer/components/time-range-selector/index.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.mjs +0 -70
- package/esm2020/src/nameserver-history-viewer/components/timezone-selector/index.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.component.mjs +0 -88
- package/esm2020/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.service.mjs +0 -47
- package/esm2020/src/nameserver-history-viewer/index.mjs +0 -3
- package/esm2020/src/nameserver-history-viewer/nameserver-history.module.mjs +0 -63
- package/esm2020/src/nameserver-history-viewer/services/chart.service.mjs +0 -328
- package/esm2020/src/nameserver-history-viewer/services/file.service.mjs +0 -390
- package/esm2020/src/nameserver-history-viewer/services/index.mjs +0 -4
- package/esm2020/src/nameserver-history-viewer/services/ui.service.mjs +0 -557
- package/esm2020/src/nameserver-history-viewer/types/abort.types.mjs +0 -6
- package/esm2020/src/nameserver-history-viewer/types/alert.types.mjs +0 -8
- package/esm2020/src/nameserver-history-viewer/types/chart-content-data-item.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/chart-content-data.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/chart-content-header.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/chart-content-time.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/chart-content.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/color-rgba.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/html-element.type.mjs +0 -9
- package/esm2020/src/nameserver-history-viewer/types/index.mjs +0 -28
- package/esm2020/src/nameserver-history-viewer/types/item.types.mjs +0 -14
- package/esm2020/src/nameserver-history-viewer/types/legend-color.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/load-history-info-backup.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/load-history-info-columnstore.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/load-history-info-host.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/load-history-info-item.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/load-history-info-persistence.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/load-history-info-rowstore.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/load-history-info-server.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/load-history-info-session-admission-control.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/load-history-info-sql.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/load-history-info-sync-primitives.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/load-history-info-threads.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/load-history-info.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/port.types.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/types/scale-group.types.mjs +0 -17
- package/esm2020/src/nameserver-history-viewer/types/unit-category.types.mjs +0 -10
- package/esm2020/src/nameserver-history-viewer/types/unit.types.mjs +0 -14
- package/esm2020/src/nameserver-history-viewer/utils/chart-util.mjs +0 -25
- package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/chartjs_ext.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/data_culling.mjs +0 -56
- package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/data_mipmap.mjs +0 -139
- package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/index.mjs +0 -41
- package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/lttb_data_mipmap.mjs +0 -106
- package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/responsive_downsample_plugin.mjs +0 -167
- package/esm2020/src/nameserver-history-viewer/utils/chartjs-downsample/utils.mjs +0 -114
- package/esm2020/src/nameserver-history-viewer/utils/chartjs-zoom/chart.zoom.mjs +0 -527
- package/esm2020/src/nameserver-history-viewer/utils/chartjs-zoom/index.mjs +0 -2
- package/esm2020/src/nameserver-history-viewer/utils/file-util.mjs +0 -161
- package/esm2020/src/nameserver-history-viewer/utils/index.mjs +0 -5
- package/esm2020/src/nameserver-history-viewer/utils/time-util.mjs +0 -99
- package/esm2020/src/nameserver-history-viewer/utils/ui-util.mjs +0 -162
- package/fesm2015/ngx-hana-nameserver-history-viewer.mjs +0 -4098
- package/fesm2015/ngx-hana-nameserver-history-viewer.mjs.map +0 -1
- package/fesm2020/ngx-hana-nameserver-history-viewer.mjs.map +0 -1
- package/ngx-hana-nameserver-history-viewer.d.ts +0 -5
- package/public-api.d.ts +0 -1
- package/src/nameserver-history-viewer/components/alert/alert.component.d.ts +0 -21
- package/src/nameserver-history-viewer/components/alert/alert.module.d.ts +0 -8
- package/src/nameserver-history-viewer/components/alert/index.d.ts +0 -2
- package/src/nameserver-history-viewer/components/file-drop-input/file-drop-input.component.d.ts +0 -16
- package/src/nameserver-history-viewer/components/file-drop-input/index.d.ts +0 -1
- package/src/nameserver-history-viewer/components/index.d.ts +0 -8
- package/src/nameserver-history-viewer/components/instruction/index.d.ts +0 -1
- package/src/nameserver-history-viewer/components/instruction/instruction.component.d.ts +0 -17
- package/src/nameserver-history-viewer/components/nameserver-history.component.d.ts +0 -262
- package/src/nameserver-history-viewer/components/port-selector/index.d.ts +0 -1
- package/src/nameserver-history-viewer/components/port-selector/port-selector.component.d.ts +0 -31
- package/src/nameserver-history-viewer/components/port-selector/port-selector.service.d.ts +0 -14
- package/src/nameserver-history-viewer/components/progress-bar/index.d.ts +0 -1
- package/src/nameserver-history-viewer/components/progress-bar/progress-bar.component.d.ts +0 -6
- package/src/nameserver-history-viewer/components/time-range-selector/index.d.ts +0 -1
- package/src/nameserver-history-viewer/components/time-range-selector/time-range-selector.component.d.ts +0 -19
- package/src/nameserver-history-viewer/components/timezone-selector/index.d.ts +0 -1
- package/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.component.d.ts +0 -26
- package/src/nameserver-history-viewer/components/timezone-selector/timezone-selector.service.d.ts +0 -21
- package/src/nameserver-history-viewer/index.d.ts +0 -2
- package/src/nameserver-history-viewer/nameserver-history.module.d.ts +0 -19
- package/src/nameserver-history-viewer/services/chart.service.d.ts +0 -59
- package/src/nameserver-history-viewer/services/file.service.d.ts +0 -63
- package/src/nameserver-history-viewer/services/index.d.ts +0 -3
- package/src/nameserver-history-viewer/services/ui.service.d.ts +0 -88
- package/src/nameserver-history-viewer/types/abort.types.d.ts +0 -4
- package/src/nameserver-history-viewer/types/alert.types.d.ts +0 -6
- package/src/nameserver-history-viewer/types/chart-content-data-item.types.d.ts +0 -4
- package/src/nameserver-history-viewer/types/chart-content-data.types.d.ts +0 -4
- package/src/nameserver-history-viewer/types/chart-content-header.types.d.ts +0 -4
- package/src/nameserver-history-viewer/types/chart-content-time.types.d.ts +0 -3
- package/src/nameserver-history-viewer/types/chart-content.types.d.ts +0 -10
- package/src/nameserver-history-viewer/types/color-rgba.types.d.ts +0 -6
- package/src/nameserver-history-viewer/types/html-element.type.d.ts +0 -7
- package/src/nameserver-history-viewer/types/index.d.ts +0 -27
- package/src/nameserver-history-viewer/types/item.types.d.ts +0 -12
- package/src/nameserver-history-viewer/types/legend-color.types.d.ts +0 -4
- package/src/nameserver-history-viewer/types/load-history-info-backup.types.d.ts +0 -7
- package/src/nameserver-history-viewer/types/load-history-info-columnstore.types.d.ts +0 -7
- package/src/nameserver-history-viewer/types/load-history-info-host.types.d.ts +0 -15
- package/src/nameserver-history-viewer/types/load-history-info-item.types.d.ts +0 -13
- package/src/nameserver-history-viewer/types/load-history-info-persistence.types.d.ts +0 -11
- package/src/nameserver-history-viewer/types/load-history-info-rowstore.types.d.ts +0 -5
- package/src/nameserver-history-viewer/types/load-history-info-server.types.d.ts +0 -10
- package/src/nameserver-history-viewer/types/load-history-info-session-admission-control.types.d.ts +0 -10
- package/src/nameserver-history-viewer/types/load-history-info-sql.types.d.ts +0 -16
- package/src/nameserver-history-viewer/types/load-history-info-sync-primitives.types.d.ts +0 -5
- package/src/nameserver-history-viewer/types/load-history-info-threads.types.d.ts +0 -9
- package/src/nameserver-history-viewer/types/load-history-info.types.d.ts +0 -22
- package/src/nameserver-history-viewer/types/port.types.d.ts +0 -5
- package/src/nameserver-history-viewer/types/scale-group.types.d.ts +0 -15
- package/src/nameserver-history-viewer/types/unit-category.types.d.ts +0 -8
- package/src/nameserver-history-viewer/types/unit.types.d.ts +0 -12
- package/src/nameserver-history-viewer/utils/chart-util.d.ts +0 -14
- package/src/nameserver-history-viewer/utils/chartjs-downsample/chartjs_ext.d.ts +0 -89
- package/src/nameserver-history-viewer/utils/chartjs-downsample/data_culling.d.ts +0 -32
- package/src/nameserver-history-viewer/utils/chartjs-downsample/data_mipmap.d.ts +0 -78
- package/src/nameserver-history-viewer/utils/chartjs-downsample/index.d.ts +0 -1
- package/src/nameserver-history-viewer/utils/chartjs-downsample/lttb_data_mipmap.d.ts +0 -57
- package/src/nameserver-history-viewer/utils/chartjs-downsample/responsive_downsample_plugin.d.ts +0 -55
- package/src/nameserver-history-viewer/utils/chartjs-downsample/utils.d.ts +0 -64
- package/src/nameserver-history-viewer/utils/chartjs-zoom/chart.zoom.d.ts +0 -30
- package/src/nameserver-history-viewer/utils/chartjs-zoom/index.d.ts +0 -1
- package/src/nameserver-history-viewer/utils/file-util.d.ts +0 -68
- package/src/nameserver-history-viewer/utils/index.d.ts +0 -4
- package/src/nameserver-history-viewer/utils/time-util.d.ts +0 -23
- package/src/nameserver-history-viewer/utils/ui-util.d.ts +0 -41
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Chart } from 'chart.js';
|
|
3
|
-
import { getColorString, getNumberWithCommas, randomColor } from '../utils';
|
|
4
|
-
import { UIService } from './ui.service';
|
|
5
|
-
import { Item, Unit } from '../types';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
// Using dynamic flag to fix the issue of ng-packagr #696: Lambda not supported
|
|
8
|
-
// @dynamic
|
|
9
|
-
export class ChartService {
|
|
10
|
-
/**
|
|
11
|
-
* toggle the dataset status of the chart, synchronously
|
|
12
|
-
*/
|
|
13
|
-
static _toggleDataSet(dataSetIndex, chart, hidden) {
|
|
14
|
-
// meta.hidden = false and dataset.hidden = false --> show
|
|
15
|
-
// meta.hidden = false and dataset.hidden = true --> show
|
|
16
|
-
// meta.hidden = null and dataset.hidden = false -> show
|
|
17
|
-
// meta.hidden = null and dataset.hidden = true -> hide
|
|
18
|
-
// in the first case (false, false), needs to click legend twice to
|
|
19
|
-
// hide the dataset, because the first click only set meta.hidden = null)
|
|
20
|
-
if (dataSetIndex != null && chart != null) {
|
|
21
|
-
const meta = chart.getDatasetMeta(dataSetIndex);
|
|
22
|
-
if (meta) {
|
|
23
|
-
if (!hidden) {
|
|
24
|
-
// display the item, if dataset hidden is false, set hidden of meta to null,
|
|
25
|
-
meta.hidden = !chart.data.datasets[dataSetIndex].hidden ? null : hidden;
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
meta.hidden = hidden;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
static _restoreDataSetStatus(chart, datasetIndex, status) {
|
|
34
|
-
if (chart && chart.data && chart.data.datasets && chart.getDatasetMeta(datasetIndex) && status) {
|
|
35
|
-
chart.data.datasets[datasetIndex].hidden = status.datasetStatus;
|
|
36
|
-
chart.getDatasetMeta(datasetIndex).hidden = status.metaStatus;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* initialize/clear the configuration for the chart
|
|
41
|
-
*/
|
|
42
|
-
static _initConfig(chart) {
|
|
43
|
-
// init data sets
|
|
44
|
-
if (chart.data && chart.data.datasets) {
|
|
45
|
-
chart.data.datasets.length = 0;
|
|
46
|
-
chart.data.datasets = void 0;
|
|
47
|
-
chart.data = void 0;
|
|
48
|
-
}
|
|
49
|
-
// init options
|
|
50
|
-
if (chart.options && chart.options.scales && (chart.options.scales.xAxes || chart.options.scales.yAxis)) {
|
|
51
|
-
if (chart.options.scales.xAxes) {
|
|
52
|
-
chart.options.scales.xAxes.length = 0;
|
|
53
|
-
chart.options.scales.xAxes = void 0;
|
|
54
|
-
}
|
|
55
|
-
if (chart.options.scales.yAxes) {
|
|
56
|
-
chart.options.scales.yAxes.length = 0;
|
|
57
|
-
chart.options.scales.yAxes = void 0;
|
|
58
|
-
}
|
|
59
|
-
chart.options.scales = void 0;
|
|
60
|
-
chart.options = void 0;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Generate DataSets by the data and header information
|
|
65
|
-
*/
|
|
66
|
-
static _generateDataSets(data, header, headerKey, defaultItems) {
|
|
67
|
-
const alpha = 0.5;
|
|
68
|
-
const colors = UIService.getColors(alpha);
|
|
69
|
-
return data.map((item, i) => {
|
|
70
|
-
const color = colors[headerKey[i]] ? getColorString(colors[headerKey[i]]) : randomColor(alpha);
|
|
71
|
-
return {
|
|
72
|
-
borderColor: color,
|
|
73
|
-
backgroundColor: color,
|
|
74
|
-
borderWidth: 1.25,
|
|
75
|
-
spanGaps: false,
|
|
76
|
-
label: header[i],
|
|
77
|
-
data: data[i],
|
|
78
|
-
fill: false,
|
|
79
|
-
yAxisID: `y-axis-${i}`,
|
|
80
|
-
hidden: !defaultItems.includes(header[i])
|
|
81
|
-
};
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
static _generateXAxes(time) {
|
|
85
|
-
const format = 'MMMDD HH:mm:ss';
|
|
86
|
-
return [
|
|
87
|
-
{
|
|
88
|
-
type: 'time',
|
|
89
|
-
time: {
|
|
90
|
-
// unit: 'second',
|
|
91
|
-
// stepSize: 1,
|
|
92
|
-
displayFormats: {
|
|
93
|
-
'millisecond': format,
|
|
94
|
-
'second': format,
|
|
95
|
-
'minute': format,
|
|
96
|
-
'hour': 'MMMDD HH',
|
|
97
|
-
'day': 'MMMDD YYYY',
|
|
98
|
-
'week': format,
|
|
99
|
-
'month': format,
|
|
100
|
-
'quarter': format,
|
|
101
|
-
'year': format,
|
|
102
|
-
},
|
|
103
|
-
tooltipFormat: 'll HH:mm:ss',
|
|
104
|
-
min: time[0],
|
|
105
|
-
max: time[time.length - 1]
|
|
106
|
-
},
|
|
107
|
-
// scaleLabel: {
|
|
108
|
-
// display: false,
|
|
109
|
-
// labelString: 'Date'
|
|
110
|
-
// },
|
|
111
|
-
ticks: {
|
|
112
|
-
maxRotation: 0,
|
|
113
|
-
reverse: true
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
];
|
|
117
|
-
}
|
|
118
|
-
static _generateYAxes(data, yScale) {
|
|
119
|
-
return data.map((item, i) => ({
|
|
120
|
-
type: 'linear',
|
|
121
|
-
display: false,
|
|
122
|
-
position: 'left',
|
|
123
|
-
id: `y-axis-${i}`,
|
|
124
|
-
gridLines: {},
|
|
125
|
-
ticks: {
|
|
126
|
-
min: 0,
|
|
127
|
-
max: yScale[i]
|
|
128
|
-
}
|
|
129
|
-
}));
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* generate configuration for chart
|
|
133
|
-
*/
|
|
134
|
-
static _generateChartConfig(time, data, yScale, header, headerKey, selection, tableSource, title, defaultItems, zoomCallback) {
|
|
135
|
-
return {
|
|
136
|
-
type: 'line',
|
|
137
|
-
data: {
|
|
138
|
-
datasets: ChartService._generateDataSets(data, header, headerKey, defaultItems)
|
|
139
|
-
},
|
|
140
|
-
options: {
|
|
141
|
-
elements: { point: { radius: 0, hitRadius: 5, hoverRadius: 5 } },
|
|
142
|
-
responsive: true,
|
|
143
|
-
animation: {
|
|
144
|
-
duration: 0, // general animation time
|
|
145
|
-
},
|
|
146
|
-
hover: {
|
|
147
|
-
animationDuration: 0,
|
|
148
|
-
onHover: function (e) {
|
|
149
|
-
const point = this.getElementAtEvent(e);
|
|
150
|
-
if (point.length) {
|
|
151
|
-
e.target.style.cursor = 'pointer';
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
e.target.style.cursor = 'default';
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
responsiveAnimationDuration: 0,
|
|
159
|
-
legend: {
|
|
160
|
-
position: 'bottom',
|
|
161
|
-
onHover: (e) => {
|
|
162
|
-
e.target.style.cursor = 'pointer';
|
|
163
|
-
},
|
|
164
|
-
labels: {
|
|
165
|
-
filter: (legendItem) => selection.isSelected(tableSource.find(row => legendItem.text === row.KPI))
|
|
166
|
-
}
|
|
167
|
-
},
|
|
168
|
-
title: {
|
|
169
|
-
display: true,
|
|
170
|
-
text: title
|
|
171
|
-
},
|
|
172
|
-
responsiveDownsample: {
|
|
173
|
-
enabled: true,
|
|
174
|
-
desiredDataPointDistance: 2,
|
|
175
|
-
minNumPoints: 200,
|
|
176
|
-
maxNumPointsToDraw: 100
|
|
177
|
-
},
|
|
178
|
-
tooltips: {
|
|
179
|
-
callbacks: {
|
|
180
|
-
label: function (tooltipItem, chartData) {
|
|
181
|
-
// format numbers with commas and add unit information
|
|
182
|
-
const label = chartData.datasets[tooltipItem.datasetIndex].label || '';
|
|
183
|
-
if (label) {
|
|
184
|
-
// get unit (eg: MB, GB, MB/s, % and so on)
|
|
185
|
-
const rowItem = tableSource.find(controlTableRow => label === controlTableRow.KPI) || '';
|
|
186
|
-
const unit = rowItem[Item.unit] && rowItem[Item.unit] !== Unit.PCT ? ` ${rowItem[Item.unit]}` : rowItem[Item.unit] || '';
|
|
187
|
-
return `${label}: ${getNumberWithCommas(tooltipItem.yLabel)}${unit}`;
|
|
188
|
-
}
|
|
189
|
-
else {
|
|
190
|
-
return getNumberWithCommas(tooltipItem.yLabel);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
},
|
|
195
|
-
scales: {
|
|
196
|
-
xAxes: ChartService._generateXAxes(time),
|
|
197
|
-
yAxes: ChartService._generateYAxes(data, yScale)
|
|
198
|
-
},
|
|
199
|
-
zoom: {
|
|
200
|
-
enabled: true,
|
|
201
|
-
drag: true,
|
|
202
|
-
mode: 'x',
|
|
203
|
-
onZoom: zoomCallback
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
_getDataSetIndexByLabel(label, chart) {
|
|
209
|
-
if (chart.data && chart.data.datasets) {
|
|
210
|
-
return chart.data.datasets.findIndex(dataset => dataset.label === label);
|
|
211
|
-
}
|
|
212
|
-
return -1;
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* destroy the chart, release the resource of the chart
|
|
216
|
-
*/
|
|
217
|
-
_destroyChart(chart) {
|
|
218
|
-
return new Promise((resolve) => {
|
|
219
|
-
if (chart) {
|
|
220
|
-
chart.destroy();
|
|
221
|
-
}
|
|
222
|
-
resolve();
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* update/refresh the chart
|
|
227
|
-
*/
|
|
228
|
-
_updateChart(chart) {
|
|
229
|
-
return new Promise((resolve, reject) => {
|
|
230
|
-
if (chart) {
|
|
231
|
-
chart.update();
|
|
232
|
-
resolve();
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
reject('Updating chart failed, error: the chart object is empty.');
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* reset zoom of the chart
|
|
241
|
-
*/
|
|
242
|
-
_resetZoom(chart) {
|
|
243
|
-
return new Promise((resolve, reject) => {
|
|
244
|
-
if (chart) {
|
|
245
|
-
const datasetStatusBeforeReset = [];
|
|
246
|
-
if (chart.data && chart.data.datasets) {
|
|
247
|
-
chart.data.datasets.forEach((dataset, index) => {
|
|
248
|
-
const meta = chart.getDatasetMeta(index);
|
|
249
|
-
if (meta) {
|
|
250
|
-
datasetStatusBeforeReset[index] = { metaStatus: meta.hidden, datasetStatus: dataset.hidden };
|
|
251
|
-
}
|
|
252
|
-
else {
|
|
253
|
-
reject(`Internal error, can not find the meta ${index}.`);
|
|
254
|
-
}
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
chart.resetZoom();
|
|
258
|
-
resolve(datasetStatusBeforeReset);
|
|
259
|
-
}
|
|
260
|
-
else {
|
|
261
|
-
reject('Resetting chart failed, error: the chart object is empty.');
|
|
262
|
-
}
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Reset Chart to initial status
|
|
267
|
-
* If legend is already selected/unselected from the list, it wouldn't be restored.
|
|
268
|
-
* @param dataSourceData the data sets of the chart
|
|
269
|
-
* @param selection selection status list
|
|
270
|
-
*/
|
|
271
|
-
resetChart(dataSourceData, selection) {
|
|
272
|
-
return this._resetZoom(this._chart).then((datasetStatusBeforeZoom) => {
|
|
273
|
-
// reset the data set by the selection status
|
|
274
|
-
dataSourceData.filter(row => !row.header).forEach(row => {
|
|
275
|
-
const index = this._getDataSetIndexByLabel(row.KPI, this._chart);
|
|
276
|
-
if (!selection.isSelected(row)) {
|
|
277
|
-
ChartService._toggleDataSet(index, this._chart, true);
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
280
|
-
ChartService._restoreDataSetStatus(this._chart, index, datasetStatusBeforeZoom[index]);
|
|
281
|
-
}
|
|
282
|
-
});
|
|
283
|
-
return this._updateChart(this._chart);
|
|
284
|
-
});
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* destroy the chart and reinitialize the configuration of the chart
|
|
288
|
-
*/
|
|
289
|
-
destroyChart() {
|
|
290
|
-
return this._destroyChart(this._chart).then(() => {
|
|
291
|
-
if (this._chart) {
|
|
292
|
-
ChartService._initConfig(this._chart);
|
|
293
|
-
this._chart = void 0;
|
|
294
|
-
}
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* generate configuration for chart and create the chart object.
|
|
299
|
-
*/
|
|
300
|
-
buildChart(time, data, yScale, header, headerKey, selection, tableSource, title, defaultItems, zoomCB) {
|
|
301
|
-
return new Promise((resolve, reject) => {
|
|
302
|
-
const ctx = document.getElementById('chartNameServerHistory')?.getContext('2d');
|
|
303
|
-
if (ctx) {
|
|
304
|
-
const cfg = ChartService._generateChartConfig(time, data, yScale, header, headerKey, selection, tableSource, title, defaultItems, zoomCB);
|
|
305
|
-
this._chart = new Chart(ctx, cfg);
|
|
306
|
-
resolve();
|
|
307
|
-
}
|
|
308
|
-
else {
|
|
309
|
-
reject('Can not find the canvas.');
|
|
310
|
-
}
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* show/hide the relative data set
|
|
315
|
-
*/
|
|
316
|
-
toggleDataInChart(label, hide) {
|
|
317
|
-
return new Promise((resolve) => {
|
|
318
|
-
ChartService._toggleDataSet(this._getDataSetIndexByLabel(label, this._chart), this._chart, hide);
|
|
319
|
-
resolve(this._updateChart(this._chart));
|
|
320
|
-
});
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
ChartService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ChartService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
324
|
-
ChartService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ChartService });
|
|
325
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ChartService, decorators: [{
|
|
326
|
-
type: Injectable
|
|
327
|
-
}] });
|
|
328
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL3NlcnZpY2VzL2NoYXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFxQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUV6RSwrRUFBK0U7QUFDL0UsV0FBVztBQUVYLE1BQU0sT0FBTyxZQUFZO0lBR3ZCOztPQUVHO0lBQ0ssTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFvQixFQUFFLEtBQVksRUFBRSxNQUFlO1FBQy9FLDBEQUEwRDtRQUMxRCx5REFBeUQ7UUFDekQsd0RBQXdEO1FBQ3hELHVEQUF1RDtRQUN2RCxtRUFBbUU7UUFDbkUseUVBQXlFO1FBQ3pFLElBQUksWUFBWSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEQsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDWCw0RUFBNEU7b0JBQzVFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2lCQUN6RTtxQkFBTTtvQkFDTCxJ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QUFDLENBQUM7YUFDcEM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQixDQUFDLEtBQWEsRUFBRSxJQUFhO1FBQ25ELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakcsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzswR0E5VVUsWUFBWTs4R0FBWixZQUFZOzRGQUFaLFlBQVk7a0JBRHhCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgQ2hhcnQgfSBmcm9tICdjaGFydC5qcyc7XHJcbmltcG9ydCB7IGdldENvbG9yU3RyaW5nLCBnZXROdW1iZXJXaXRoQ29tbWFzLCByYW5kb21Db2xvciB9IGZyb20gJy4uL3V0aWxzJztcclxuaW1wb3J0IHsgVUlTZXJ2aWNlIH0gZnJvbSAnLi91aS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2hhcnRDb250ZW50RGF0YUl0ZW0sIExlZ2VuZENvbG9yLCBJdGVtLCBVbml0IH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuLy8gVXNpbmcgZHluYW1pYyBmbGFnIHRvIGZpeCB0aGUgaXNzdWUgb2YgbmctcGFja2FnciAjNjk2OiBMYW1iZGEgbm90IHN1cHBvcnRlZFxyXG4vLyBAZHluYW1pY1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDaGFydFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgX2NoYXJ0OiBDaGFydDtcclxuXHJcbiAgLyoqXHJcbiAgICogdG9nZ2xlIHRoZSBkYXRhc2V0IHN0YXR1cyBvZiB0aGUgY2hhcnQsIHN5bmNocm9ub3VzbHlcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyBfdG9nZ2xlRGF0YVNldChkYXRhU2V0SW5kZXg6IG51bWJlciwgY2hhcnQ6IENoYXJ0LCBoaWRkZW46IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIC8vIG1ldGEuaGlkZGVuID0gZmFsc2UgYW5kIGRhdGFzZXQuaGlkZGVuID0gZmFsc2UgLS0+IHNob3dcclxuICAgIC8vIG1ldGEuaGlkZGVuID0gZmFsc2UgYW5kIGRhdGFzZXQuaGlkZGVuID0gdHJ1ZSAtLT4gc2hvd1xyXG4gICAgLy8gbWV0YS5oaWRkZW4gPSBudWxsIGFuZCBkYXRhc2V0LmhpZGRlbiA9IGZhbHNlIC0+IHNob3dcclxuICAgIC8vIG1ldGEuaGlkZGVuID0gbnVsbCBhbmQgZGF0YXNldC5oaWRkZW4gPSB0cnVlIC0+IGhpZGVcclxuICAgIC8vIGluIHRoZSBmaXJzdCBjYXNlIChmYWxzZSwgZmFsc2UpLCBuZWVkcyB0byBjbGljayBsZWdlbmQgdHdpY2UgdG9cclxuICAgIC8vIGhpZGUgdGhlIGRhdGFzZXQsIGJlY2F1c2UgdGhlIGZpcnN0IGNsaWNrIG9ubHkgc2V0IG1ldGEuaGlkZGVuID0gbnVsbClcclxuICAgIGlmIChkYXRhU2V0SW5kZXggIT0gbnVsbCAmJiBjaGFydCAhPSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShkYXRhU2V0SW5kZXgpO1xyXG4gICAgICBpZiAobWV0YSkge1xyXG4gICAgICAgIGlmICghaGlkZGVuKSB7XHJcbiAgICAgICAgICAvLyBkaXNwbGF5IHRoZSBpdGVtLCBpZiBkYXRhc2V0IGhpZGRlbiBpcyBmYWxzZSwgc2V0IGhpZGRlbiBvZiBtZXRhIHRvIG51bGwsXHJcbiAgICAgICAgICBtZXRhLmhpZGRlbiA9ICFjaGFydC5kYXRhLmRhdGFzZXRzW2RhdGFTZXRJbmRleF0uaGlkZGVuID8gbnVsbCA6IGhpZGRlbjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbWV0YS5oaWRkZW4gPSBoaWRkZW47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgc3RhdGljIF9yZXN0b3JlRGF0YVNldFN0YXR1cyhjaGFydDogQ2hhcnQsIGRhdGFzZXRJbmRleDogbnVtYmVyLCBzdGF0dXM6IHttZXRhU3RhdHVzOiBib29sZWFuLCBkYXRhc2V0U3RhdHVzOiBib29sZWFufSk6IHZvaWQge1xyXG4gICAgaWYgKGNoYXJ0ICYmIGNoYXJ0LmRhdGEgJiYgY2hhcnQuZGF0YS5kYXRhc2V0cyAmJiBjaGFydC5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpICYmIHN0YXR1cykge1xyXG4gICAgICBjaGFydC5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0uaGlkZGVuID0gc3RhdHVzLmRhdGFzZXRTdGF0dXM7XHJcbiAgICAgIGNoYXJ0LmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCkuaGlkZGVuID0gc3RhdHVzLm1ldGFTdGF0dXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBpbml0aWFsaXplL2NsZWFyIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgY2hhcnRcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyBfaW5pdENvbmZpZyhjaGFydDogYW55KTogdm9pZCB7XHJcbiAgICAvLyBpbml0IGRhdGEgc2V0c1xyXG4gICAgaWYgKGNoYXJ0LmRhdGEgJiYgY2hhcnQuZGF0YS5kYXRhc2V0cykge1xyXG4gICAgICBjaGFydC5kYXRhLmRhdGFzZXRzLmxlbmd0aCA9IDA7XHJcbiAgICAgIGNoYXJ0LmRhdGEuZGF0YXNldHMgPSB2b2lkIDA7XHJcbiAgICAgIGNoYXJ0LmRhdGEgPSB2b2lkIDA7XHJcbiAgICB9XHJcbiAgICAvLyBpbml0IG9wdGlvbnNcclxuICAgIGlmIChjaGFydC5vcHRpb25zICYmIGNoYXJ0Lm9wdGlvbnMuc2NhbGVzICYmIChjaGFydC5vcHRpb25zLnNjYWxlcy54QXhlcyB8fCBjaGFydC5vcHRpb25zLnNjYWxlcy55QXhpcykpIHtcclxuICAgICAgaWYgKGNoYXJ0Lm9wdGlvbnMuc2NhbGVzLnhBeGVzKSB7XHJcbiAgICAgICAgY2hhcnQub3B0aW9ucy5zY2FsZXMueEF4ZXMubGVuZ3RoID0gMDtcclxuICAgICAgICBjaGFydC5vcHRpb25zLnNjYWxlcy54QXhlcyA9IHZvaWQgMDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2hhcnQub3B0aW9ucy5zY2FsZXMueUF4ZXMpIHtcclxuICAgICAgICBjaGFydC5vcHRpb25zLnNjYWxlcy55QXhlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIGNoYXJ0Lm9wdGlvbnMuc2NhbGVzLnlBeGVzID0gdm9pZCAwO1xyXG4gICAgICB9XHJcbiAgICAgIGNoYXJ0Lm9wdGlvbnMuc2NhbGVzID0gdm9pZCAwO1xyXG4gICAgICBjaGFydC5vcHRpb25zID0gdm9pZCAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgRGF0YVNldHMgYnkgdGhlIGRhdGEgYW5kIGhlYWRlciBpbmZvcm1hdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgc3RhdGljIF9nZW5lcmF0ZURhdGFTZXRzKGRhdGE6IENoYXJ0Q29udGVudERhdGFJdGVtW11bXSwgaGVhZGVyOiBzdHJpbmdbXSwgaGVhZGVyS2V5OiBzdHJpbmdbXSwgZGVmYXVsdEl0ZW1zOiBzdHJpbmdbXSk6IGFueSB7XHJcbiAgICBjb25zdCBhbHBoYSA9IDAuNTtcclxuICAgIGNvbnN0IGNvbG9yczogTGVnZW5kQ29sb3IgPSBVSVNlcnZpY2UuZ2V0Q29sb3JzKGFscGhhKTtcclxuICAgIHJldHVybiBkYXRhLm1hcCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICBjb25zdCBjb2xvciA9IGNvbG9yc1toZWFkZXJLZXlbaV1dID8gZ2V0Q29sb3JTdHJpbmcoY29sb3JzW2hlYWRlcktleVtpXV0pIDogcmFuZG9tQ29sb3IoYWxwaGEpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGJvcmRlckNvbG9yOiBjb2xvcixcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLFxyXG4gICAgICAgIGJvcmRlcldpZHRoOiAxLjI1LFxyXG4gICAgICAgIHNwYW5HYXBzOiBmYWxzZSxcclxuICAgICAgICBsYWJlbDogaGVhZGVyW2ldLFxyXG4gICAgICAgIGRhdGE6IGRhdGFbaV0sXHJcbiAgICAgICAgZmlsbDogZmFsc2UsXHJcbiAgICAgICAgeUF4aXNJRDogYHktYXhpcy0ke2l9YCxcclxuICAgICAgICBoaWRkZW46ICFkZWZhdWx0SXRlbXMuaW5jbHVkZXMoaGVhZGVyW2ldKVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgc3RhdGljIF9nZW5lcmF0ZVhBeGVzKHRpbWU6IG51bWJlcltdKTogYW55IHtcclxuICAgIGNvbnN0IGZvcm1hdCA9ICdNTU1ERCBISDptbTpzcyc7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogJ3RpbWUnLFxyXG4gICAgICAgIHRpbWU6IHtcclxuICAgICAgICAgIC8vIHVuaXQ6ICdzZWNvbmQnLFxyXG4gICAgICAgICAgLy8gc3RlcFNpemU6IDEsXHJcbiAgICAgICAgICBkaXNwbGF5Rm9ybWF0czoge1xyXG4gICAgICAgICAgICAnbWlsbGlzZWNvbmQnOiBmb3JtYXQsXHJcbiAgICAgICAgICAgICdzZWNvbmQnOiBmb3JtYXQsXHJcbiAgICAgICAgICAgICdtaW51dGUnOiBmb3JtYXQsXHJcbiAgICAgICAgICAgICdob3VyJzogJ01NTUREIEhIJyxcclxuICAgICAgICAgICAgJ2RheSc6ICdNTU1ERCBZWVlZJyxcclxuICAgICAgICAgICAgJ3dlZWsnOiBmb3JtYXQsXHJcbiAgICAgICAgICAgICdtb250aCc6IGZvcm1hdCxcclxuICAgICAgICAgICAgJ3F1YXJ0ZXInOiBmb3JtYXQsXHJcbiAgICAgICAgICAgICd5ZWFyJzogZm9ybWF0LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRvb2x0aXBGb3JtYXQ6ICdsbCBISDptbTpzcycsXHJcbiAgICAgICAgICBtaW46IHRpbWVbMF0sXHJcbiAgICAgICAgICBtYXg6IHRpbWVbdGltZS5sZW5ndGggLSAxXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gc2NhbGVMYWJlbDoge1xyXG4gICAgICAgIC8vICAgZGlzcGxheTogZmFsc2UsXHJcbiAgICAgICAgLy8gICBsYWJlbFN0cmluZzogJ0RhdGUnXHJcbiAgICAgICAgLy8gfSxcclxuICAgICAgICB0aWNrczoge1xyXG4gICAgICAgICAgbWF4Um90YXRpb246IDAsXHJcbiAgICAgICAgICByZXZlcnNlOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuICBwcml2YXRlIHN0YXRpYyBfZ2VuZXJhdGVZQXhlcyhkYXRhOiBDaGFydENvbnRlbnREYXRhSXRlbVtdW10sIHlTY2FsZTogbnVtYmVyW10pOiBhbnkge1xyXG4gICAgcmV0dXJuIGRhdGEubWFwKChpdGVtLCBpKSA9PiAoe1xyXG4gICAgICB0eXBlOiAnbGluZWFyJyxcclxuICAgICAgZGlzcGxheTogZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiAnbGVmdCcsXHJcbiAgICAgIGlkOiBgeS1heGlzLSR7aX1gLFxyXG4gICAgICBncmlkTGluZXM6IHtcclxuICAgICAgfSxcclxuICAgICAgdGlja3M6IHtcclxuICAgICAgICBtaW46IDAsXHJcbiAgICAgICAgbWF4OiB5U2NhbGVbaV1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2VuZXJhdGUgY29uZmlndXJhdGlvbiBmb3IgY2hhcnRcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyBfZ2VuZXJhdGVDaGFydENvbmZpZyh0aW1lOiBudW1iZXJbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBDaGFydENvbnRlbnREYXRhSXRlbVtdW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeVNjYWxlOiBudW1iZXJbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHN0cmluZ1tdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcktleTogc3RyaW5nW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxhbnk+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlU291cmNlOiBhbnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SXRlbXM6IHN0cmluZ1tdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb21DYWxsYmFjazogYW55KTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHR5cGU6ICdsaW5lJyxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGRhdGFzZXRzOiBDaGFydFNlcnZpY2UuX2dlbmVyYXRlRGF0YVNldHMoZGF0YSwgaGVhZGVyLCBoZWFkZXJLZXksIGRlZmF1bHRJdGVtcylcclxuICAgICAgfSxcclxuICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgIGVsZW1lbnRzOiB7cG9pbnQ6IHtyYWRpdXM6IDAsIGhpdFJhZGl1czogNSwgaG92ZXJSYWRpdXM6IDV9fSwgLy8gc2V0IHJhZGl1cyB0byAwIG5vdCB0byBkaXNwbGF5IHBvaW50XHJcbiAgICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcclxuICAgICAgICBhbmltYXRpb246IHtcclxuICAgICAgICAgIGR1cmF0aW9uOiAwLCAvLyBnZW5lcmFsIGFuaW1hdGlvbiB0aW1lXHJcbiAgICAgICAgfSxcclxuICAgICAgICBob3Zlcjoge1xyXG4gICAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IDAsIC8vIGR1cmF0aW9uIG9mIGFuaW1hdGlvbnMgd2hlbiBob3ZlcmluZyBhbiBpdGVtXHJcbiAgICAgICAgICBvbkhvdmVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IHRoaXMuZ2V0RWxlbWVudEF0RXZlbnQoZSk7XHJcbiAgICAgICAgICAgIGlmIChwb2ludC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBlLnRhcmdldC5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZS50YXJnZXQuc3R5bGUuY3Vyc29yID0gJ2RlZmF1bHQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNwb25zaXZlQW5pbWF0aW9uRHVyYXRpb246IDAsIC8vIGFuaW1hdGlvbiBkdXJhdGlvbiBhZnRlciBhIHJlc2l6ZVxyXG4gICAgICAgIGxlZ2VuZDoge1xyXG4gICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgb25Ib3ZlcjogKGUpID0+IHtcclxuICAgICAgICAgICAgZS50YXJnZXQuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGxhYmVsczoge1xyXG4gICAgICAgICAgICBmaWx0ZXI6IChsZWdlbmRJdGVtKSA9PiBzZWxlY3Rpb24uaXNTZWxlY3RlZCh0YWJsZVNvdXJjZS5maW5kKHJvdyA9PiBsZWdlbmRJdGVtLnRleHQgPT09IHJvdy5LUEkpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGl0bGU6IHtcclxuICAgICAgICAgIGRpc3BsYXk6IHRydWUsXHJcbiAgICAgICAgICB0ZXh0OiB0aXRsZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzcG9uc2l2ZURvd25zYW1wbGU6IHtcclxuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICBkZXNpcmVkRGF0YVBvaW50RGlzdGFuY2U6IDIsXHJcbiAgICAgICAgICBtaW5OdW1Qb2ludHM6IDIwMCxcclxuICAgICAgICAgIG1heE51bVBvaW50c1RvRHJhdzogMTAwXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b29sdGlwczoge1xyXG4gICAgICAgICAgY2FsbGJhY2tzOiB7XHJcbiAgICAgICAgICAgIGxhYmVsOiBmdW5jdGlvbih0b29sdGlwSXRlbSwgY2hhcnREYXRhKSB7XHJcbiAgICAgICAgICAgICAgLy8gZm9ybWF0IG51bWJlcnMgd2l0aCBjb21tYXMgYW5kIGFkZCB1bml0IGluZm9ybWF0aW9uXHJcbiAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBjaGFydERhdGEuZGF0YXNldHNbdG9vbHRpcEl0ZW0uZGF0YXNldEluZGV4XS5sYWJlbCB8fCAnJztcclxuICAgICAgICAgICAgICBpZiAobGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIC8vIGdldCB1bml0IChlZzogTUIsIEdCLCBNQi9zLCAlIGFuZCBzbyBvbilcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0l0ZW0gPSB0YWJsZVNvdXJjZS5maW5kKGNvbnRyb2xUYWJsZVJvdyA9PiBsYWJlbCA9PT0gY29udHJvbFRhYmxlUm93LktQSSkgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1bml0ID0gcm93SXRlbVtJdGVtLnVuaXRdICYmIHJvd0l0ZW1bSXRlbS51bml0XSAhPT0gVW5pdC5QQ1QgPyBgICR7cm93SXRlbVtJdGVtLnVuaXRdfWAgOiByb3dJdGVtW0l0ZW0udW5pdF0gfHwgJyc7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7bGFiZWx9OiAke2dldE51bWJlcldpdGhDb21tYXModG9vbHRpcEl0ZW0ueUxhYmVsKX0ke3VuaXR9YDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldE51bWJlcldpdGhDb21tYXModG9vbHRpcEl0ZW0ueUxhYmVsKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNjYWxlczoge1xyXG4gICAgICAgICAgeEF4ZXM6IENoYXJ0U2VydmljZS5fZ2VuZXJhdGVYQXhlcyh0aW1lKSxcclxuICAgICAgICAgIHlBeGVzOiBDaGFydFNlcnZpY2UuX2dlbmVyYXRlWUF4ZXMoZGF0YSwgeVNjYWxlKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgem9vbToge1xyXG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICAgIGRyYWc6IHRydWUsXHJcbiAgICAgICAgICBtb2RlOiAneCcsXHJcbiAgICAgICAgICBvblpvb206IHpvb21DYWxsYmFja1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldERhdGFTZXRJbmRleEJ5TGFiZWwobGFiZWw6IHN0cmluZywgY2hhcnQ6IENoYXJ0KTogbnVtYmVyIHtcclxuICAgIGlmIChjaGFydC5kYXRhICYmIGNoYXJ0LmRhdGEuZGF0YXNldHMpIHtcclxuICAgICAgcmV0dXJuIGNoYXJ0LmRhdGEuZGF0YXNldHMuZmluZEluZGV4KGRhdGFzZXQgPT4gZGF0YXNldC5sYWJlbCA9PT0gbGFiZWwpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZGVzdHJveSB0aGUgY2hhcnQsIHJlbGVhc2UgdGhlIHJlc291cmNlIG9mIHRoZSBjaGFydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3lDaGFydChjaGFydDogQ2hhcnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBpZiAoY2hhcnQpIHtcclxuICAgICAgICBjaGFydC5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIHVwZGF0ZS9yZWZyZXNoIHRoZSBjaGFydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3VwZGF0ZUNoYXJ0KGNoYXJ0OiBDaGFydCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaWYgKGNoYXJ0KSB7XHJcbiAgICAgICAgY2hhcnQudXBkYXRlKCk7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlamVjdCgnVXBkYXRpbmcgY2hhcnQgZmFpbGVkLCBlcnJvcjogdGhlIGNoYXJ0IG9iamVjdCBpcyBlbXB0eS4nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZXNldCB6b29tIG9mIHRoZSBjaGFydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3Jlc2V0Wm9vbShjaGFydDogYW55KTogUHJvbWlzZTx7bWV0YVN0YXR1czogYm9vbGVhbiwgZGF0YXNldFN0YXR1czogYm9vbGVhbn1bXT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaWYgKGNoYXJ0KSB7XHJcbiAgICAgICAgY29uc3QgZGF0YXNldFN0YXR1c0JlZm9yZVJlc2V0ID0gW107XHJcbiAgICAgICAgaWYgKGNoYXJ0LmRhdGEgJiYgY2hhcnQuZGF0YS5kYXRhc2V0cykge1xyXG4gICAgICAgICAgY2hhcnQuZGF0YS5kYXRhc2V0cy5mb3JFYWNoKChkYXRhc2V0LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoaW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAobWV0YSkge1xyXG4gICAgICAgICAgICAgIGRhdGFzZXRTdGF0dXNCZWZvcmVSZXNldFtpbmRleF0gPSB7bWV0YVN0YXR1czogbWV0YS5oaWRkZW4sIGRhdGFzZXRTdGF0dXM6IGRhdGFzZXQuaGlkZGVufTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZWplY3QoYEludGVybmFsIGVycm9yLCBjYW4gbm90IGZpbmQgdGhlIG1ldGEgJHtpbmRleH0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjaGFydC5yZXNldFpvb20oKTtcclxuICAgICAgICByZXNvbHZlKGRhdGFzZXRTdGF0dXNCZWZvcmVSZXNldCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVqZWN0KCdSZXNldHRpbmcgY2hhcnQgZmFpbGVkLCBlcnJvcjogdGhlIGNoYXJ0IG9iamVjdCBpcyBlbXB0eS4nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IENoYXJ0IHRvIGluaXRpYWwgc3RhdHVzXHJcbiAgICogSWYgbGVnZW5kIGlzIGFscmVhZHkgc2VsZWN0ZWQvdW5zZWxlY3RlZCBmcm9tIHRoZSBsaXN0LCBpdCB3b3VsZG4ndCBiZSByZXN0b3JlZC5cclxuICAgKiBAcGFyYW0gZGF0YVNvdXJjZURhdGEgdGhlIGRhdGEgc2V0cyBvZiB0aGUgY2hhcnRcclxuICAgKiBAcGFyYW0gc2VsZWN0aW9uIHNlbGVjdGlvbiBzdGF0dXMgbGlzdFxyXG4gICAqL1xyXG4gIHB1YmxpYyByZXNldENoYXJ0KGRhdGFTb3VyY2VEYXRhOiBhbnksIHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55Pik6IFByb21pc2UgPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Jlc2V0Wm9vbSh0aGlzLl9jaGFydCkudGhlbigoZGF0YXNldFN0YXR1c0JlZm9yZVpvb20pID0+IHtcclxuICAgICAgLy8gcmVzZXQgdGhlIGRhdGEgc2V0IGJ5IHRoZSBzZWxlY3Rpb24gc3RhdHVzXHJcbiAgICAgIGRhdGFTb3VyY2VEYXRhLmZpbHRlcihyb3cgPT4gIXJvdy5oZWFkZXIpLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2dldERhdGFTZXRJbmRleEJ5TGFiZWwocm93LktQSSwgdGhpcy5fY2hhcnQpO1xyXG4gICAgICAgIGlmICghc2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KSkge1xyXG4gICAgICAgICAgQ2hhcnRTZXJ2aWNlLl90b2dnbGVEYXRhU2V0KGluZGV4LCB0aGlzLl9jaGFydCwgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIENoYXJ0U2VydmljZS5fcmVzdG9yZURhdGFTZXRTdGF0dXModGhpcy5fY2hhcnQsIGluZGV4LCBkYXRhc2V0U3RhdHVzQmVmb3JlWm9vbVtpbmRleF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl91cGRhdGVDaGFydCh0aGlzLl9jaGFydCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGRlc3Ryb3kgdGhlIGNoYXJ0IGFuZCByZWluaXRpYWxpemUgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGNoYXJ0XHJcbiAgICovXHJcbiAgcHVibGljIGRlc3Ryb3lDaGFydCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rlc3Ryb3lDaGFydCh0aGlzLl9jaGFydCkudGhlbigoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9jaGFydCkge1xyXG4gICAgICAgIENoYXJ0U2VydmljZS5faW5pdENvbmZpZyh0aGlzLl9jaGFydCk7XHJcbiAgICAgICAgdGhpcy5fY2hhcnQgPSB2b2lkIDA7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2VuZXJhdGUgY29uZmlndXJhdGlvbiBmb3IgY2hhcnQgYW5kIGNyZWF0ZSB0aGUgY2hhcnQgb2JqZWN0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBidWlsZENoYXJ0KHRpbWU6IG51bWJlcltdLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IENoYXJ0Q29udGVudERhdGFJdGVtW11bXSxcclxuICAgICAgICAgICAgICAgICAgICB5U2NhbGU6IG51bWJlcltdLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjogc3RyaW5nW10sXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyS2V5OiBzdHJpbmdbXSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPGFueT4sXHJcbiAgICAgICAgICAgICAgICAgICAgdGFibGVTb3VyY2U6IGFueSxcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRJdGVtczogc3RyaW5nW10sXHJcbiAgICAgICAgICAgICAgICAgICAgem9vbUNCKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBjdHggPSAoPEhUTUxDYW52YXNFbGVtZW50PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhcnROYW1lU2VydmVySGlzdG9yeScpKT8uZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgaWYgKGN0eCkge1xyXG4gICAgICAgIGNvbnN0IGNmZzogYW55ID0gQ2hhcnRTZXJ2aWNlLl9nZW5lcmF0ZUNoYXJ0Q29uZmlnKHRpbWUsIGRhdGEsIHlTY2FsZSwgaGVhZGVyLCBoZWFkZXJLZXksIHNlbGVjdGlvbiwgdGFibGVTb3VyY2UsIHRpdGxlLCBkZWZhdWx0SXRlbXMsIHpvb21DQik7XHJcbiAgICAgICAgdGhpcy5fY2hhcnQgPSBuZXcgQ2hhcnQoY3R4LCBjZmcpO1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZWplY3QoJ0NhbiBub3QgZmluZCB0aGUgY2FudmFzLicpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHNob3cvaGlkZSB0aGUgcmVsYXRpdmUgZGF0YSBzZXRcclxuICAgKi9cclxuICBwdWJsaWMgdG9nZ2xlRGF0YUluQ2hhcnQobGFiZWw6IHN0cmluZywgaGlkZTogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgQ2hhcnRTZXJ2aWNlLl90b2dnbGVEYXRhU2V0KHRoaXMuX2dldERhdGFTZXRJbmRleEJ5TGFiZWwobGFiZWwsIHRoaXMuX2NoYXJ0KSwgdGhpcy5fY2hhcnQsIGhpZGUpO1xyXG4gICAgICByZXNvbHZlKHRoaXMuX3VwZGF0ZUNoYXJ0KHRoaXMuX2NoYXJ0KSk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|