ngx-hana-nameserver-history-viewer 21.1.0 → 21.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/fesm2022/ngx-hana-nameserver-history-viewer.mjs +188 -70
- package/fesm2022/ngx-hana-nameserver-history-viewer.mjs.map +1 -1
- package/ngx-hana-nameserver-history-viewer-21.1.2.tgz +0 -0
- package/package.json +4 -3
- package/types/ngx-hana-nameserver-history-viewer.d.ts +29 -3
- package/ngx-hana-nameserver-history-viewer-21.1.0.tgz +0 -0
package/README.md
CHANGED
|
@@ -22,7 +22,7 @@ npm install ngx-hana-nameserver-history-viewer --save
|
|
|
22
22
|
|
|
23
23
|
### Requirements
|
|
24
24
|
|
|
25
|
-
The library depends on [ngx-selection-table](https://github.com/ckyycc/ngx-selection-table), [ngx-dropdown-list](https://github.com/ckyycc/ngx-dropdown-list), [
|
|
25
|
+
The library depends on [ngx-selection-table](https://github.com/ckyycc/ngx-selection-table), [ngx-dropdown-list](https://github.com/ckyycc/ngx-dropdown-list), [date-fns](https://github.com/date-fns/date-fns), [papaparse](https://github.com/mholt/PapaParse), [nshviewer-angular-datetime-picker](https://github.com/ckyycc/date-time-picker), [chart.js](https://github.com/chartjs/Chart.js).
|
|
26
26
|
|
|
27
27
|
The only file required is the ng-pick-datetime `picker.min.css` file:
|
|
28
28
|
|
|
@@ -32,17 +32,17 @@ The only file required is the ng-pick-datetime `picker.min.css` file:
|
|
|
32
32
|
{
|
|
33
33
|
...
|
|
34
34
|
"styles": [
|
|
35
|
-
"../node_modules
|
|
35
|
+
"../node_modules/nshviewer-angular-datetime-picker/assets/style/picker.min.css",
|
|
36
36
|
...
|
|
37
37
|
],
|
|
38
38
|
...
|
|
39
39
|
}
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
##### 2. Or import the `picker.min.css` in your
|
|
42
|
+
##### 2. Or import the `picker.min.css` in your main.ts
|
|
43
43
|
|
|
44
|
-
```
|
|
45
|
-
|
|
44
|
+
```TypeScript
|
|
45
|
+
import 'nshviewer-angular-datetime-picker/assets/style/picker.min.css';
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
## Usage
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { isDevMode, Injectable, EventEmitter, Output, Input, Component, ChangeDetectionStrategy, ElementRef, ViewChild } from '@angular/core';
|
|
3
3
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
4
|
-
import
|
|
4
|
+
import { format } from 'date-fns';
|
|
5
|
+
import { TZDateMini } from '@date-fns/tz';
|
|
5
6
|
import { Chart, registerables, TimeScale, LinearScale, CategoryScale, PointElement, LineElement, Title, Tooltip, Legend, Filler, Decimation } from 'chart.js';
|
|
6
|
-
import 'chartjs-adapter-
|
|
7
|
+
import 'chartjs-adapter-date-fns';
|
|
7
8
|
import zoomPlugin from 'chartjs-plugin-zoom';
|
|
8
9
|
import { parse } from 'papaparse';
|
|
9
|
-
import 'hammerjs';
|
|
10
10
|
import * as i2 from 'nshviewer-angular-datetime-picker';
|
|
11
11
|
import { OwlDateTimeModule, OwlNativeDateTimeModule } from 'nshviewer-angular-datetime-picker';
|
|
12
12
|
import { SelectionTableComponent } from 'ngx-selection-table';
|
|
@@ -129,6 +129,25 @@ const _IGNORED_LINE_FROM_TAIL = 1;
|
|
|
129
129
|
* 06: web dispatcher; 07: xsengine; 10 compileserver; 11 dpserver; 12 esserver; 29 xscontroller
|
|
130
130
|
*/
|
|
131
131
|
const _NON_INDEX_SERVER_PORTS = ['01', '02', '04', '05', '06', '07', '10', '11', '12', '29'];
|
|
132
|
+
const _HANA_SERVICES = {
|
|
133
|
+
indexserver: 'Index Server',
|
|
134
|
+
nameserver: 'Name Server',
|
|
135
|
+
compileserver: 'Compile Server',
|
|
136
|
+
preprocessor: 'Preprocessor Server',
|
|
137
|
+
webdispatcher: 'SAP Web Dispatcher',
|
|
138
|
+
scriptserver: 'Script Server',
|
|
139
|
+
docstore: 'Document Store Server',
|
|
140
|
+
diserver: 'HDI Server',
|
|
141
|
+
xsengine: 'XS Classic Server',
|
|
142
|
+
esserver: 'Extended Store Server',
|
|
143
|
+
dpserver: 'Data Provisioning Server',
|
|
144
|
+
streamingserver: 'Streaming Cluster',
|
|
145
|
+
etsserver: 'Accelerator for SAP ASE',
|
|
146
|
+
xscontroller: 'SAP HANA XS Controller',
|
|
147
|
+
xsexecagent: 'SAP HANA XS Execution Agent',
|
|
148
|
+
xsuaaserver: 'SAP HANA XS UAA'
|
|
149
|
+
};
|
|
150
|
+
const getHANAServiceDisplayName = (s) => (s ? (_HANA_SERVICES[s] ?? s) : "");
|
|
132
151
|
/**
|
|
133
152
|
* Get the ignored line number from tail (For some reason, hana studio will abandon the last line of nameserver history trace file).
|
|
134
153
|
*/
|
|
@@ -314,11 +333,37 @@ function _getTimeRange(time) {
|
|
|
314
333
|
}
|
|
315
334
|
return { startTime: 0, endTime: 0 };
|
|
316
335
|
}
|
|
336
|
+
function getEtcTimezones() {
|
|
337
|
+
// Add Etc timezones manually since Intl doesn't include them
|
|
338
|
+
const etcTimezones = [
|
|
339
|
+
'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6',
|
|
340
|
+
'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT-0',
|
|
341
|
+
'Etc/GMT-1', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6',
|
|
342
|
+
'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12',
|
|
343
|
+
'Etc/GMT-13', 'Etc/GMT-14'
|
|
344
|
+
];
|
|
345
|
+
return [...etcTimezones, ...getZeroOffsetEtcZones()];
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* etc zones with 0 offset
|
|
349
|
+
*/
|
|
350
|
+
function getZeroOffsetEtcZones() {
|
|
351
|
+
return ['Etc/GMT', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UTC', 'Etc/UCT', 'Etc/Universal', 'Etc/Zulu'];
|
|
352
|
+
}
|
|
317
353
|
/**
|
|
318
354
|
* get default local time zone
|
|
319
355
|
*/
|
|
320
|
-
function
|
|
321
|
-
return
|
|
356
|
+
function defaultTimezone() {
|
|
357
|
+
return Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
*
|
|
361
|
+
* @returns get supported timezones from intl
|
|
362
|
+
*/
|
|
363
|
+
function supportedTimezones() {
|
|
364
|
+
const zones = Intl.supportedValuesOf('timeZone');
|
|
365
|
+
// Combine Intl zones with Etc zones
|
|
366
|
+
return [...zones, ...getEtcTimezones()];
|
|
322
367
|
}
|
|
323
368
|
/**
|
|
324
369
|
* Get time from provided timezone, using this only because chart.js doesn't support timezone.
|
|
@@ -328,19 +373,48 @@ function getDefaultTimezone() {
|
|
|
328
373
|
*/
|
|
329
374
|
function getTimeFromTimeZone(time, timezone) {
|
|
330
375
|
if (timezone == null || timezone.length === 0) {
|
|
331
|
-
timezone =
|
|
376
|
+
timezone = defaultTimezone();
|
|
332
377
|
console.warn(`getTimeFromTimeZone - Input timezone is null, returning the local (${timezone}) time. `);
|
|
333
378
|
}
|
|
334
|
-
|
|
335
|
-
const
|
|
379
|
+
// Get timezone offsets in milliseconds
|
|
380
|
+
const utcOffset = getOffset(timezone, time * 1000);
|
|
381
|
+
const currentOffset = getOffset(defaultTimezone(), time * 1000); // seconds
|
|
336
382
|
// convert to utc and then to selected timezone
|
|
337
|
-
return time +
|
|
383
|
+
return time + utcOffset - currentOffset;
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* get timezone offsests in seconds
|
|
387
|
+
*/
|
|
388
|
+
function getOffset(timezone, time) {
|
|
389
|
+
const date = new Date(time);
|
|
390
|
+
let offset;
|
|
391
|
+
// Handle Etc timezones specially since getTimezoneOffset doesn't support them
|
|
392
|
+
if (getZeroOffsetEtcZones().includes(timezone)) {
|
|
393
|
+
offset = 0;
|
|
394
|
+
}
|
|
395
|
+
else if (timezone.startsWith('Etc/GMT')) {
|
|
396
|
+
// Extract the offset from the zone name
|
|
397
|
+
// Note: Etc/GMT+X means UTC-X (opposite sign)
|
|
398
|
+
const match = timezone.match(/Etc\/GMT([+-])(\d+)/);
|
|
399
|
+
if (match) {
|
|
400
|
+
const sign = match[1];
|
|
401
|
+
const hours = parseInt(match[2], 10);
|
|
402
|
+
offset = (sign === '+' ? -hours : +hours) * 60 * 60;
|
|
403
|
+
}
|
|
404
|
+
else {
|
|
405
|
+
offset = 0;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
offset = (new TZDateMini(date, timezone)).getTimezoneOffset() * -60;
|
|
410
|
+
}
|
|
411
|
+
return offset;
|
|
338
412
|
}
|
|
339
413
|
/**
|
|
340
414
|
* Get time formatted with the provided timezone
|
|
341
415
|
*/
|
|
342
416
|
function getTimeString(time) {
|
|
343
|
-
return
|
|
417
|
+
return format(new Date(time), 'yyyy-MM-dd HH:mm:ss');
|
|
344
418
|
}
|
|
345
419
|
/**
|
|
346
420
|
* Get the time range string by time array, eg: 2018-10-25 10:10:00 ~ 2018-10-25 12:12:00
|
|
@@ -674,13 +748,13 @@ class UIService {
|
|
|
674
748
|
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']);
|
|
675
749
|
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))']);
|
|
676
750
|
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))']);
|
|
677
|
-
const indexserverCpu = infoItem([Item.kpi, '
|
|
751
|
+
const indexserverCpu = infoItem([Item.kpi, 'Service CPU'], [Item.yScale, 0,], [Item.yScaleGroup, ScaleGroup.CPU], [Item.unit, Unit.PCT], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'CPU used by Service']);
|
|
678
752
|
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']);
|
|
679
753
|
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']);
|
|
680
754
|
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']);
|
|
681
755
|
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']);
|
|
682
756
|
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']);
|
|
683
|
-
const indexserverSwapIn = infoItem([Item.kpi, '
|
|
757
|
+
const indexserverSwapIn = infoItem([Item.kpi, 'Service Swap In'], [Item.yScale, 100], [Item.yScaleGroup, ScaleGroup.Swap], [Item.unit, Unit.MBPerSec], [Item.max, -1], [Item.average, -1], [Item.sum, -1], [Item.last, -1], [Item.description, 'Bytes read from swap by Service (column 12(majflt) in /proc/<pid>/stat * sysconf(_SC_PAGESIZE))']);
|
|
684
758
|
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']);
|
|
685
759
|
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']);
|
|
686
760
|
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']);
|
|
@@ -824,7 +898,7 @@ class UIService {
|
|
|
824
898
|
};
|
|
825
899
|
return {
|
|
826
900
|
'Host': loadHistoryInfoHost,
|
|
827
|
-
'
|
|
901
|
+
'Service': loadHistoryInfoIndexServer,
|
|
828
902
|
'SQL': loadHistoryInfoSQL,
|
|
829
903
|
'Row Store': loadHistoryInfoRowStore,
|
|
830
904
|
'Column Store': loadHistoryInfoColumnStore,
|
|
@@ -1146,18 +1220,33 @@ class ChartService {
|
|
|
1146
1220
|
/**
|
|
1147
1221
|
* Generate DataSets by the data and header information
|
|
1148
1222
|
*/
|
|
1149
|
-
static _generateDataSets(data, header, headerKey, defaultItems) {
|
|
1223
|
+
static _generateDataSets(data, header, headerKey, defaultItems, yScale) {
|
|
1150
1224
|
const alpha = 0.5;
|
|
1151
1225
|
const colors = UIService.getColors(alpha);
|
|
1152
1226
|
return data.map((item, i) => {
|
|
1153
1227
|
const color = colors[headerKey[i]] ? getColorString(colors[headerKey[i]]) : randomColor(alpha);
|
|
1228
|
+
// only cap 100 which is percentage
|
|
1229
|
+
if (yScale[i] === 100) {
|
|
1230
|
+
// to save some memory, change the value directly
|
|
1231
|
+
// cappedData = item.map(dp =>
|
|
1232
|
+
// dp.y > 100 ? { ...dp, y: 100, originalY: dp.y } : dp
|
|
1233
|
+
// );
|
|
1234
|
+
// }
|
|
1235
|
+
for (let j = 0, len = item.length; j < len; j++) {
|
|
1236
|
+
const dp = item[j];
|
|
1237
|
+
if (dp.y > 100) {
|
|
1238
|
+
dp.originalY = dp.y;
|
|
1239
|
+
dp.y = 100;
|
|
1240
|
+
}
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1154
1243
|
return {
|
|
1155
1244
|
borderColor: color,
|
|
1156
1245
|
backgroundColor: color,
|
|
1157
1246
|
borderWidth: 1,
|
|
1158
1247
|
spanGaps: false,
|
|
1159
1248
|
label: header[i],
|
|
1160
|
-
data:
|
|
1249
|
+
data: item,
|
|
1161
1250
|
fill: false,
|
|
1162
1251
|
yAxisID: `y-axis-${i}`,
|
|
1163
1252
|
hidden: !defaultItems.includes(header[i]),
|
|
@@ -1178,17 +1267,17 @@ class ChartService {
|
|
|
1178
1267
|
type: 'time',
|
|
1179
1268
|
time: {
|
|
1180
1269
|
displayFormats: {
|
|
1181
|
-
'millisecond': '
|
|
1182
|
-
'second': '
|
|
1183
|
-
'minute': '
|
|
1184
|
-
'hour': '
|
|
1185
|
-
'day': '
|
|
1186
|
-
'week': '
|
|
1187
|
-
'month': 'MMM
|
|
1188
|
-
'quarter': 'MMM
|
|
1189
|
-
'year': 'MMM
|
|
1270
|
+
'millisecond': 'MMMdd HH:mm:ss',
|
|
1271
|
+
'second': 'MMMdd HH:mm:ss',
|
|
1272
|
+
'minute': 'MMMdd HH:mm',
|
|
1273
|
+
'hour': 'MMMdd HH',
|
|
1274
|
+
'day': 'MMMdd',
|
|
1275
|
+
'week': 'MMMdd',
|
|
1276
|
+
'month': 'MMM yyyy',
|
|
1277
|
+
'quarter': 'MMM yyyy',
|
|
1278
|
+
'year': 'MMM yyyy',
|
|
1190
1279
|
},
|
|
1191
|
-
tooltipFormat: '
|
|
1280
|
+
tooltipFormat: 'MMM dd, yyyy HH:mm:ss'
|
|
1192
1281
|
},
|
|
1193
1282
|
min: timeArray[0],
|
|
1194
1283
|
max: timeArray[timeArray.length - 1],
|
|
@@ -1196,10 +1285,7 @@ class ChartService {
|
|
|
1196
1285
|
source: 'auto',
|
|
1197
1286
|
maxRotation: 0,
|
|
1198
1287
|
autoSkip: true,
|
|
1199
|
-
|
|
1200
|
-
// // Hide every 2nd tick label
|
|
1201
|
-
// return index % 2 === 0? this.getLabelForValue(val) : '';
|
|
1202
|
-
// },
|
|
1288
|
+
autoSkipPadding: 40, // label space
|
|
1203
1289
|
},
|
|
1204
1290
|
reverse: false
|
|
1205
1291
|
}
|
|
@@ -1226,7 +1312,7 @@ class ChartService {
|
|
|
1226
1312
|
return {
|
|
1227
1313
|
type: 'line',
|
|
1228
1314
|
data: {
|
|
1229
|
-
datasets: ChartService._generateDataSets(data, header, headerKey, defaultItems)
|
|
1315
|
+
datasets: ChartService._generateDataSets(data, header, headerKey, defaultItems, yScale)
|
|
1230
1316
|
},
|
|
1231
1317
|
options: {
|
|
1232
1318
|
layout: {
|
|
@@ -1235,9 +1321,9 @@ class ChartService {
|
|
|
1235
1321
|
}
|
|
1236
1322
|
},
|
|
1237
1323
|
interaction: {
|
|
1238
|
-
intersect: true, // true means
|
|
1324
|
+
intersect: true, // true means must actually hover over a point
|
|
1239
1325
|
axis: 'x',
|
|
1240
|
-
mode: '
|
|
1326
|
+
mode: 'index' // when intersecting, show all datasets at the same index/x position
|
|
1241
1327
|
},
|
|
1242
1328
|
responsive: true,
|
|
1243
1329
|
animation: false, // must disable it otherwise zoomin will hang
|
|
@@ -1269,6 +1355,8 @@ class ChartService {
|
|
|
1269
1355
|
text: title
|
|
1270
1356
|
},
|
|
1271
1357
|
tooltip: {
|
|
1358
|
+
mode: 'nearest',
|
|
1359
|
+
intersect: true, // true means only show tooltip for the closest point
|
|
1272
1360
|
callbacks: {
|
|
1273
1361
|
label: function (context) {
|
|
1274
1362
|
// format numbers with commas and add unit information
|
|
@@ -1277,10 +1365,14 @@ class ChartService {
|
|
|
1277
1365
|
// get unit (eg: MB, GB, MB/s, % and so on)
|
|
1278
1366
|
const rowItem = tableSource.find(controlTableRow => label === controlTableRow.KPI) || '';
|
|
1279
1367
|
const unit = rowItem[Item.unit] && rowItem[Item.unit] !== Unit.PCT ? ` ${rowItem[Item.unit]}` : rowItem[Item.unit] || '';
|
|
1280
|
-
|
|
1368
|
+
// Use original value if available, otherwise use displayed value
|
|
1369
|
+
const valueToShow = context.raw?.originalY ?? context.parsed.y;
|
|
1370
|
+
return `${label}: ${getNumberWithCommas(valueToShow)}${unit}`;
|
|
1281
1371
|
}
|
|
1282
1372
|
else {
|
|
1283
|
-
|
|
1373
|
+
// Use original value if available, otherwise use displayed value
|
|
1374
|
+
const valueToShow = context.raw?.originalY ?? context.parsed.y;
|
|
1375
|
+
return getNumberWithCommas(valueToShow);
|
|
1284
1376
|
}
|
|
1285
1377
|
}
|
|
1286
1378
|
}
|
|
@@ -1289,7 +1381,7 @@ class ChartService {
|
|
|
1289
1381
|
decimation: {
|
|
1290
1382
|
enabled: true,
|
|
1291
1383
|
algorithm: 'lttb', // Largest-Triangle-Three-Buckets algorithm
|
|
1292
|
-
samples:
|
|
1384
|
+
samples: 600, // Increased samples for better quality
|
|
1293
1385
|
threshold: 1 // increase it may hang the ui due to swith of using/not using downsampling, disable it (set it to 0), will slowdown average zoom in.
|
|
1294
1386
|
},
|
|
1295
1387
|
zoom: {
|
|
@@ -2266,15 +2358,15 @@ class TimezoneSelectorService {
|
|
|
2266
2358
|
/**
|
|
2267
2359
|
* get the default timezone
|
|
2268
2360
|
*/
|
|
2269
|
-
|
|
2270
|
-
return
|
|
2361
|
+
get defaultTimezone() {
|
|
2362
|
+
return defaultTimezone();
|
|
2271
2363
|
}
|
|
2272
2364
|
/**
|
|
2273
2365
|
* Get all the timezones for each region
|
|
2274
2366
|
*/
|
|
2275
2367
|
getZones() {
|
|
2276
2368
|
const timezones = [];
|
|
2277
|
-
const zones =
|
|
2369
|
+
const zones = supportedTimezones();
|
|
2278
2370
|
zones.forEach(zone => {
|
|
2279
2371
|
// get region
|
|
2280
2372
|
let region;
|
|
@@ -2285,6 +2377,16 @@ class TimezoneSelectorService {
|
|
|
2285
2377
|
});
|
|
2286
2378
|
return timezones;
|
|
2287
2379
|
}
|
|
2380
|
+
getFormattedZone(region, zone) {
|
|
2381
|
+
return `${region} - ${this._formatTimezone(zone)} ${this._getOffset(zone)}`;
|
|
2382
|
+
}
|
|
2383
|
+
_getOffset(zone) {
|
|
2384
|
+
const offsetMinutes = getOffset(zone, Date.now()) / 60;
|
|
2385
|
+
const absOffset = Math.abs(offsetMinutes);
|
|
2386
|
+
const hours = Math.floor(absOffset / 60);
|
|
2387
|
+
const minutes = absOffset % 60;
|
|
2388
|
+
return `(GMT${offsetMinutes < 0 ? '-' : '+'}${this._formatNumber(hours)}:${this._formatNumber(minutes)})`;
|
|
2389
|
+
}
|
|
2288
2390
|
/**
|
|
2289
2391
|
* build timezone lists
|
|
2290
2392
|
*/
|
|
@@ -2298,6 +2400,13 @@ class TimezoneSelectorService {
|
|
|
2298
2400
|
timezoneRegion.zones.push(zone);
|
|
2299
2401
|
}
|
|
2300
2402
|
}
|
|
2403
|
+
_formatTimezone(zone) {
|
|
2404
|
+
const tz = zone.split('/');
|
|
2405
|
+
return tz[tz.length - 1].replace('_', ' ');
|
|
2406
|
+
}
|
|
2407
|
+
_formatNumber(number) {
|
|
2408
|
+
return number < 10 || !number ? `0${number}` : `${number}`;
|
|
2409
|
+
}
|
|
2301
2410
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TimezoneSelectorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2302
2411
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TimezoneSelectorService }); }
|
|
2303
2412
|
}
|
|
@@ -2306,40 +2415,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
2306
2415
|
}] });
|
|
2307
2416
|
|
|
2308
2417
|
class TimezoneSelectorComponent {
|
|
2309
|
-
static _formatNumber(number) {
|
|
2310
|
-
return number < 10 || !number ? `0${number}` : `${number}`;
|
|
2311
|
-
}
|
|
2312
2418
|
constructor(service) {
|
|
2313
2419
|
this.service = service;
|
|
2314
2420
|
this.disabled = false;
|
|
2315
2421
|
this.timezoneChange = new EventEmitter();
|
|
2316
|
-
const defaultTZ = this.service.
|
|
2317
|
-
this.timezones = this.service.getZones().map(tz => ({ group: tz.region, items: tz.zones.map(zone => ({ id: zone, value: zone, text: this.
|
|
2422
|
+
const defaultTZ = this.service.defaultTimezone;
|
|
2423
|
+
this.timezones = this.service.getZones().map(tz => ({ group: tz.region, items: tz.zones.map(zone => ({ id: zone, value: zone, text: this.service.getFormattedZone(tz.region, zone), selected: zone === defaultTZ })) }));
|
|
2318
2424
|
}
|
|
2319
2425
|
ngOnChanges(changes) {
|
|
2320
2426
|
if (changes['timezone'] && changes['timezone'].currentValue) {
|
|
2321
2427
|
if (this.timezones) {
|
|
2322
|
-
this.timezones = this.service.getZones().map(tz => ({ group: tz.region, items: tz.zones.map(zone => ({ id: zone, value: zone, text: this.
|
|
2428
|
+
this.timezones = this.service.getZones().map(tz => ({ group: tz.region, items: tz.zones.map(zone => ({ id: zone, value: zone, text: this.service.getFormattedZone(tz.region, zone), selected: zone === changes['timezone'].currentValue })) }));
|
|
2323
2429
|
}
|
|
2324
2430
|
}
|
|
2325
2431
|
}
|
|
2326
|
-
_getFormattedZone(region, zone) {
|
|
2327
|
-
return `${region} - ${this._formatTimezone(zone)} ${this._getOffset(zone)}`;
|
|
2328
|
-
}
|
|
2329
|
-
_formatTimezone(zone) {
|
|
2330
|
-
const tz = zone.split('/');
|
|
2331
|
-
return tz[tz.length - 1].replace('_', ' ');
|
|
2332
|
-
}
|
|
2333
|
-
_getOffset(zone) {
|
|
2334
|
-
let offset = moment.tz(zone).utcOffset();
|
|
2335
|
-
const neg = offset < 0;
|
|
2336
|
-
if (neg) {
|
|
2337
|
-
offset = -1 * offset;
|
|
2338
|
-
}
|
|
2339
|
-
const hours = Math.floor(offset / 60);
|
|
2340
|
-
const minutes = (offset / 60 - hours) * 60;
|
|
2341
|
-
return `(GMT${neg ? '-' : '+'}${TimezoneSelectorComponent._formatNumber(hours)}:${TimezoneSelectorComponent._formatNumber(minutes)})`;
|
|
2342
|
-
}
|
|
2343
2432
|
/**
|
|
2344
2433
|
* onChange function called by the "ngx-select" element
|
|
2345
2434
|
* @param selectedTimezone The timezone string selected
|
|
@@ -2471,6 +2560,10 @@ class NameServerHistoryComponent {
|
|
|
2471
2560
|
* Input (optional) bind to [showInstruction]
|
|
2472
2561
|
*/
|
|
2473
2562
|
this.showInstruction = true;
|
|
2563
|
+
/**
|
|
2564
|
+
* update timezone value
|
|
2565
|
+
*/
|
|
2566
|
+
this.timezoneChange = new EventEmitter();
|
|
2474
2567
|
/**
|
|
2475
2568
|
* time info of the name server history file
|
|
2476
2569
|
*/
|
|
@@ -2635,6 +2728,14 @@ class NameServerHistoryComponent {
|
|
|
2635
2728
|
const nameserverHistoryContentElement = this.nameserverHistoryContentRef ? this.nameserverHistoryContentRef.nativeElement : null;
|
|
2636
2729
|
setChartHeight(nameserverHistoryAllElement, nameserverHistoryContentElement);
|
|
2637
2730
|
}
|
|
2731
|
+
/**
|
|
2732
|
+
* Handle timezone change from timezone-selector
|
|
2733
|
+
* @param newTimezone the new timezone value
|
|
2734
|
+
*/
|
|
2735
|
+
onTimezoneChange(newTimezone) {
|
|
2736
|
+
this.timezone = newTimezone;
|
|
2737
|
+
this.timezoneChange.emit(newTimezone);
|
|
2738
|
+
}
|
|
2638
2739
|
/**
|
|
2639
2740
|
* Switch port and reinitialize chart, triggered by changing the port
|
|
2640
2741
|
* @param port the selected port
|
|
@@ -2660,7 +2761,7 @@ class NameServerHistoryComponent {
|
|
|
2660
2761
|
]);
|
|
2661
2762
|
// init the environment with switch flag
|
|
2662
2763
|
this._initChartEnv(true).then(() => {
|
|
2663
|
-
return this._buildChart(port, null, true);
|
|
2764
|
+
return this._buildChart(port, null, this.servicePortInfo?.[this.host]?.[port], true);
|
|
2664
2765
|
}).catch(e => this._showMessage(Alert.error, e));
|
|
2665
2766
|
}
|
|
2666
2767
|
}
|
|
@@ -2674,7 +2775,7 @@ class NameServerHistoryComponent {
|
|
|
2674
2775
|
* get default timezone
|
|
2675
2776
|
*/
|
|
2676
2777
|
get defaultTimezone() {
|
|
2677
|
-
return
|
|
2778
|
+
return defaultTimezone();
|
|
2678
2779
|
}
|
|
2679
2780
|
/**
|
|
2680
2781
|
* get the key column (KPI)
|
|
@@ -2784,7 +2885,7 @@ class NameServerHistoryComponent {
|
|
|
2784
2885
|
}
|
|
2785
2886
|
}
|
|
2786
2887
|
return sleep(100).then(() => {
|
|
2787
|
-
return this._buildChart(port, ports);
|
|
2888
|
+
return this._buildChart(port, ports, this.servicePortInfo?.[this.host]?.[port]);
|
|
2788
2889
|
});
|
|
2789
2890
|
});
|
|
2790
2891
|
});
|
|
@@ -2820,12 +2921,13 @@ class NameServerHistoryComponent {
|
|
|
2820
2921
|
* build and display the chart on page
|
|
2821
2922
|
* @param port the selected port
|
|
2822
2923
|
* @param ports all available ports
|
|
2924
|
+
* @param service service name
|
|
2823
2925
|
* @param switchFlag indicates whether this function is triggered from switching ports (no init port selector needed)
|
|
2824
2926
|
*/
|
|
2825
|
-
_buildChart(port, ports, switchFlag = false) {
|
|
2927
|
+
_buildChart(port, ports, service, switchFlag = false) {
|
|
2826
2928
|
const beginTime = new Date();
|
|
2827
2929
|
if (port) {
|
|
2828
|
-
return Promise.resolve(this._loadSettingsForSelectionsTable(port))
|
|
2930
|
+
return Promise.resolve(this._loadSettingsForSelectionsTable(port, service))
|
|
2829
2931
|
.then(() => {
|
|
2830
2932
|
// get the config
|
|
2831
2933
|
return this.chartService.buildChart(this.time[port], this.data[port], this.uiService.getYScale(this._headerKey, port), this._headerText, this._headerKey, this._selection, this.tableSource, this._getHostTitle(port), this.uiService.getDisplayItems(this._headerKey, port, this.defaultSelectedItems), this._onZoom.bind(this))
|
|
@@ -2912,8 +3014,9 @@ class NameServerHistoryComponent {
|
|
|
2912
3014
|
* Load settings for the selection table (the right part of the chart)
|
|
2913
3015
|
* @param port the selected port
|
|
2914
3016
|
*/
|
|
2915
|
-
_loadSettingsForSelectionsTable(port) {
|
|
3017
|
+
_loadSettingsForSelectionsTable(port, service) {
|
|
2916
3018
|
this.tableSource = this.uiService.getSelectionTableRows(this._headerKey, port, this.defaultSelectedItems);
|
|
3019
|
+
this._updateServiceHeader(port, service);
|
|
2917
3020
|
this._selection = new SelectionModel(true, []);
|
|
2918
3021
|
this.tableSource.forEach(row => {
|
|
2919
3022
|
if (this.uiService.getDisplayItems(this._headerKey, port, this.defaultSelectedItems).includes(row.KPI)) {
|
|
@@ -2921,6 +3024,17 @@ class NameServerHistoryComponent {
|
|
|
2921
3024
|
}
|
|
2922
3025
|
});
|
|
2923
3026
|
}
|
|
3027
|
+
/**
|
|
3028
|
+
* Replace confusing service type, issue: https://github.com/ckyycc/ngx-hana-nameserver-history-viewer/issues/14
|
|
3029
|
+
* by default will replaced it with Service (port), eg: Service (30015)
|
|
3030
|
+
*if topology is imported, it will be: Name Server (30001) or Index Server (30040), and so on...
|
|
3031
|
+
*/
|
|
3032
|
+
_updateServiceHeader(port, service) {
|
|
3033
|
+
const serviceHeader = this.tableSource.find(ts => ts[this.kpiColumn] === 'Service' && ts.header);
|
|
3034
|
+
if (serviceHeader) {
|
|
3035
|
+
serviceHeader[this.kpiColumn] = `${getHANAServiceDisplayName(service) || 'Service'} (${port})`;
|
|
3036
|
+
}
|
|
3037
|
+
}
|
|
2924
3038
|
/**
|
|
2925
3039
|
* Show messages
|
|
2926
3040
|
* @param type type of the message
|
|
@@ -2970,11 +3084,11 @@ class NameServerHistoryComponent {
|
|
|
2970
3084
|
}
|
|
2971
3085
|
}
|
|
2972
3086
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NameServerHistoryComponent, deps: [{ token: FileService }, { token: ChartService }, { token: UIService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2973
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: NameServerHistoryComponent, isStandalone: true, selector: "ngx-hana-nameserver-history-viewer", inputs: { defaultSelectedItems: "defaultSelectedItems", hideMeasureColumns: "hideMeasureColumns", maxRowsLimitation: "maxRowsLimitation", showInstruction: "showInstruction", timezone: "timezone", fileBuffer: "fileBuffer", streamModeFileName: "streamModeFileName", autoDisplay: "autoDisplay" }, providers: [FileService, ChartService, UIService], viewQueries: [{ propertyName: "nameserverHistoryAllRef", first: true, predicate: ["nameserverHistoryAll"], descendants: true, read: ElementRef }, { propertyName: "nameserverHistoryContentRef", first: true, predicate: ["nameserverHistoryContent"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<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", styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .upload-box-content .box-stream-mode-text{text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: AlertComponent, selector: "alert", inputs: ["alertMessage", "alertType", "alertTimeout"], outputs: ["alertMessageChange"] }, { kind: "component", type: TimezoneSelectorComponent, selector: "timezone-selector", inputs: ["disabled", "timezone"], outputs: ["timezoneChange"] }, { kind: "component", type: TimeRangeSelectorComponent, selector: "time-range-selector", inputs: ["disabled", "dateTimeRange"], outputs: ["dateTimeRangeChange"] }, { kind: "component", type: ProgressBarComponent, selector: "progress-bar", inputs: ["progress"] }, { kind: "component", type: PortSelectorComponent, selector: "port-selector", inputs: ["disabled", "port", "ports"], outputs: ["portChange"] }, { kind: "component", type: InstructionComponent, selector: "instruction", inputs: ["step1Finished", "step2Finished", "step3Finished", "step4Finished", "step5Finished", "show"], outputs: ["showChange"] }, { kind: "component", type: FileDropInputComponent, selector: "file-drop-input", inputs: ["dropAreaText", "inputAreaText"], outputs: ["fileDrop", "fileInput"] }, { kind: "component", type: SelectionTableComponent, selector: "ngx-selection-table", inputs: ["filter", "keyColumn", "tableSource", "checkbox", "multiSelection", "clickToSelect", "hiddenColumns", "tooltipColumn", "searchStyle", "searchColumn"], outputs: ["change"] }, { kind: "ngmodule", type: OwlDateTimeModule }, { kind: "ngmodule", type: OwlNativeDateTimeModule }] }); }
|
|
3087
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.1", type: NameServerHistoryComponent, isStandalone: true, selector: "ngx-hana-nameserver-history-viewer", inputs: { defaultSelectedItems: "defaultSelectedItems", hideMeasureColumns: "hideMeasureColumns", maxRowsLimitation: "maxRowsLimitation", showInstruction: "showInstruction", timezone: "timezone", fileBuffer: "fileBuffer", streamModeFileName: "streamModeFileName", autoDisplay: "autoDisplay", servicePortInfo: "servicePortInfo" }, outputs: { timezoneChange: "timezoneChange" }, providers: [FileService, ChartService, UIService], viewQueries: [{ propertyName: "nameserverHistoryAllRef", first: true, predicate: ["nameserverHistoryAll"], descendants: true, read: ElementRef }, { propertyName: "nameserverHistoryContentRef", first: true, predicate: ["nameserverHistoryContent"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\" class=\"box-stream-mode-text\">{{streamModeFileName || 'nameserver_history.trc (stream mode)'}}</p>\r\n </div>\r\n <div *ngIf=\"showReadFileProgress\">\r\n <progress-bar [progress]=\"readProgress\"></progress-bar>\r\n </div>\r\n </div>\r\n <div class=\"input-time\">\r\n <div class=\"input-time-range\">\r\n <time-range-selector [disabled]=\"showReadFileProgress\" [(dateTimeRange)]=\"dateTimeRange\"></time-range-selector>\r\n </div>\r\n <div class=\"timezone-selector\">\r\n <timezone-selector [(timezone)]=\"timezone\" (timezoneChange)=\"onTimezoneChange($event)\" [disabled]=\"showReadFileProgress\"></timezone-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"port-selection\">\r\n <div class=\"port-selector\">\r\n <port-selector (portChange)=\"switchPortForChart($event)\" [(port)]=\"port\" [ports]=\"ports\" [disabled]=\"showReadFileProgress\"></port-selector>\r\n </div>\r\n <div class=\"port-load-button\">\r\n <button (click)=\"loadPorts()\" title=\"Load all ports from name server history trace file.\" [disabled]=\"!enableShowChartButton || port || !enableLoadPortsButton\">{{showReadFileProgress? \"Loading...\" : \"Load\"}}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chart-operation\">\r\n <div class=\"left\">\r\n <button (click)=\"showChart()\" title=\"Load and display all data from name server history trace file.\" [disabled]=\"!enableShowChartButton\">{{showReadFileProgress? \"Loading...\" : \"Show\"}}</button>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"resetChart()\" title=\"Reset zoom of chart.\" [disabled]=\"showReadFileProgress || !enableResetChartButton\">Reset Chart</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div #nameserverHistoryContent class=\"nameserver-history-content\">\r\n <div class=\"nameserver-history-content-chart\">\r\n <instruction [(show)]=\"showInstruction\" *ngIf=\"!showChartFlag && showInstruction\"\r\n [step1Finished]=\"!!file\"\r\n [step2Finished]=\"dateTimeRange && (!!dateTimeRange[0] || !!dateTimeRange[1]) || timezone != defaultTimezone\"\r\n [step3Finished]=\"!!port\"\r\n [step4Finished]=\"stepShowChart && !enableShowChartButton\"\r\n [step5Finished]=\"false\">\r\n </instruction>\r\n <canvas id=\"chartNameServerHistory\" ></canvas>\r\n </div>\r\n <div class=\"nameserver-history-content-controller\" >\r\n <ngx-selection-table (change)=\"selectItem($event)\" *ngIf=\"showChartFlag\"\r\n [filter]=\"true\"\r\n [checkbox]=\"true\"\r\n [tableSource]=\"tableSource\"\r\n [keyColumn]=\"kpiColumn\"\r\n [hiddenColumns]=\"hiddenColumns\"\r\n [tooltipColumn]=\"descColumn\"\r\n [searchStyle]=\"searchType\"\r\n [searchColumn]=\"kpiColumn\"\r\n [multiSelection]=\"true\">\r\n </ngx-selection-table>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"message-container\" *ngIf=\"alertMessage\">\r\n <alert [(alertMessage)]=\"alertMessage\" [alertType]=\"alertType\" [alertTimeout]=\"30000\"></alert>\r\n</div>\r\n", styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .upload-box-content .box-stream-mode-text{text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: AlertComponent, selector: "alert", inputs: ["alertMessage", "alertType", "alertTimeout"], outputs: ["alertMessageChange"] }, { kind: "component", type: TimezoneSelectorComponent, selector: "timezone-selector", inputs: ["disabled", "timezone"], outputs: ["timezoneChange"] }, { kind: "component", type: TimeRangeSelectorComponent, selector: "time-range-selector", inputs: ["disabled", "dateTimeRange"], outputs: ["dateTimeRangeChange"] }, { kind: "component", type: ProgressBarComponent, selector: "progress-bar", inputs: ["progress"] }, { kind: "component", type: PortSelectorComponent, selector: "port-selector", inputs: ["disabled", "port", "ports"], outputs: ["portChange"] }, { kind: "component", type: InstructionComponent, selector: "instruction", inputs: ["step1Finished", "step2Finished", "step3Finished", "step4Finished", "step5Finished", "show"], outputs: ["showChange"] }, { kind: "component", type: FileDropInputComponent, selector: "file-drop-input", inputs: ["dropAreaText", "inputAreaText"], outputs: ["fileDrop", "fileInput"] }, { kind: "component", type: SelectionTableComponent, selector: "ngx-selection-table", inputs: ["filter", "keyColumn", "tableSource", "checkbox", "multiSelection", "clickToSelect", "hiddenColumns", "tooltipColumn", "searchStyle", "searchColumn"], outputs: ["change"] }, { kind: "ngmodule", type: OwlDateTimeModule }, { kind: "ngmodule", type: OwlNativeDateTimeModule }] }); }
|
|
2974
3088
|
}
|
|
2975
3089
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: NameServerHistoryComponent, decorators: [{
|
|
2976
3090
|
type: Component,
|
|
2977
|
-
args: [{ selector: 'ngx-hana-nameserver-history-viewer', providers: [FileService, ChartService, UIService], standalone: true, imports: [CommonModule, AlertComponent, TimezoneSelectorComponent, TimeRangeSelectorComponent, ProgressBarComponent, PortSelectorComponent, InstructionComponent, FileDropInputComponent, SelectionTableComponent, OwlDateTimeModule, OwlNativeDateTimeModule], template: "<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", styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .upload-box-content .box-stream-mode-text{text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}\n"] }]
|
|
3091
|
+
args: [{ selector: 'ngx-hana-nameserver-history-viewer', providers: [FileService, ChartService, UIService], standalone: true, imports: [CommonModule, AlertComponent, TimezoneSelectorComponent, TimeRangeSelectorComponent, ProgressBarComponent, PortSelectorComponent, InstructionComponent, FileDropInputComponent, SelectionTableComponent, OwlDateTimeModule, OwlNativeDateTimeModule], template: "<div #nameserverHistoryAll class=\"nameserver-history-all\" (window:resize)=\"onResize()\">\r\n <div class=\"toolbar-chart\">\r\n <div class=\"upload-box-content\">\r\n <div *ngIf=\"!showReadFileProgress\">\r\n <file-drop-input (fileDrop)=\"fileDropped($event)\" (fileInput)=\"fileSelected($event)\"\r\n [dropAreaText]= \"abbreviatedFileName\"\r\n [inputAreaText]=\"'Browse'\"\r\n [title]=\"file?.name? file.name:'Select a name server history file from your local disk.'\"\r\n *ngIf=\"!fileBuffer\">\r\n </file-drop-input>\r\n <p *ngIf=\"fileBuffer\" class=\"box-stream-mode-text\">{{streamModeFileName || 'nameserver_history.trc (stream mode)'}}</p>\r\n </div>\r\n <div *ngIf=\"showReadFileProgress\">\r\n <progress-bar [progress]=\"readProgress\"></progress-bar>\r\n </div>\r\n </div>\r\n <div class=\"input-time\">\r\n <div class=\"input-time-range\">\r\n <time-range-selector [disabled]=\"showReadFileProgress\" [(dateTimeRange)]=\"dateTimeRange\"></time-range-selector>\r\n </div>\r\n <div class=\"timezone-selector\">\r\n <timezone-selector [(timezone)]=\"timezone\" (timezoneChange)=\"onTimezoneChange($event)\" [disabled]=\"showReadFileProgress\"></timezone-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"port-selection\">\r\n <div class=\"port-selector\">\r\n <port-selector (portChange)=\"switchPortForChart($event)\" [(port)]=\"port\" [ports]=\"ports\" [disabled]=\"showReadFileProgress\"></port-selector>\r\n </div>\r\n <div class=\"port-load-button\">\r\n <button (click)=\"loadPorts()\" title=\"Load all ports from name server history trace file.\" [disabled]=\"!enableShowChartButton || port || !enableLoadPortsButton\">{{showReadFileProgress? \"Loading...\" : \"Load\"}}</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chart-operation\">\r\n <div class=\"left\">\r\n <button (click)=\"showChart()\" title=\"Load and display all data from name server history trace file.\" [disabled]=\"!enableShowChartButton\">{{showReadFileProgress? \"Loading...\" : \"Show\"}}</button>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"resetChart()\" title=\"Reset zoom of chart.\" [disabled]=\"showReadFileProgress || !enableResetChartButton\">Reset Chart</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div #nameserverHistoryContent class=\"nameserver-history-content\">\r\n <div class=\"nameserver-history-content-chart\">\r\n <instruction [(show)]=\"showInstruction\" *ngIf=\"!showChartFlag && showInstruction\"\r\n [step1Finished]=\"!!file\"\r\n [step2Finished]=\"dateTimeRange && (!!dateTimeRange[0] || !!dateTimeRange[1]) || timezone != defaultTimezone\"\r\n [step3Finished]=\"!!port\"\r\n [step4Finished]=\"stepShowChart && !enableShowChartButton\"\r\n [step5Finished]=\"false\">\r\n </instruction>\r\n <canvas id=\"chartNameServerHistory\" ></canvas>\r\n </div>\r\n <div class=\"nameserver-history-content-controller\" >\r\n <ngx-selection-table (change)=\"selectItem($event)\" *ngIf=\"showChartFlag\"\r\n [filter]=\"true\"\r\n [checkbox]=\"true\"\r\n [tableSource]=\"tableSource\"\r\n [keyColumn]=\"kpiColumn\"\r\n [hiddenColumns]=\"hiddenColumns\"\r\n [tooltipColumn]=\"descColumn\"\r\n [searchStyle]=\"searchType\"\r\n [searchColumn]=\"kpiColumn\"\r\n [multiSelection]=\"true\">\r\n </ngx-selection-table>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"message-container\" *ngIf=\"alertMessage\">\r\n <alert [(alertMessage)]=\"alertMessage\" [alertType]=\"alertType\" [alertTimeout]=\"30000\"></alert>\r\n</div>\r\n", styles: [":host *,:host *:before,:host *:after{box-sizing:inherit;display:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}:host .hover-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{outline:0;box-shadow:0 0 6px #23adff}:host .dashed-box,:host .nameserver-history-all .toolbar-chart .chart-operation button,:host .nameserver-history-all .toolbar-chart .port-selection,:host .nameserver-history-all .toolbar-chart .input-time,:host .nameserver-history-all .toolbar-chart .upload-box-content{background:#f8f8f8;box-shadow:inset 0 20px 20px -20px #0009;border:1px dashed #0782d0}:host .solid-box,:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{background:#fff none;border:1px solid #ccc;border-radius:4px;line-height:1.42857143}:host .nameserver-history-all{width:98%;min-width:1314px;height:auto;border:1px none #0782d0;border-bottom-style:dashed;margin:3px 1%;box-sizing:border-box;display:inline-block;font-size:14px;font-weight:400;font-family:Helvetica,Arial,sans-serif}:host .nameserver-history-all .toolbar-chart{width:100%;height:48px}:host .nameserver-history-all .toolbar-chart button{text-align:center;white-space:nowrap;vertical-align:middle}:host .nameserver-history-all .toolbar-chart button:hover{text-shadow:1px 1px 3px royalblue;cursor:pointer;font-weight:600}:host .nameserver-history-all .toolbar-chart button:disabled{text-shadow:none;opacity:.65;cursor:default;color:#a9a9a9;font-weight:400}:host .nameserver-history-all .toolbar-chart .upload-box-content{width:20%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .upload-box-content .box-stream-mode-text{text-align:center;color:#00008b}:host .nameserver-history-all .toolbar-chart .input-time{margin-left:1%;margin-right:1%;width:43%;height:100%}:host .nameserver-history-all .toolbar-chart .input-time .input-time-range{height:100%;width:57%;float:left}:host .nameserver-history-all .toolbar-chart .input-time .timezone-selector{margin-top:6px;height:100%;width:42.5%;margin-right:.5%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection{width:14%;margin-right:1%;height:48px}:host .nameserver-history-all .toolbar-chart .port-selection .port-selector{margin-top:6px;margin-left:2%;margin-right:1%;width:47%;float:left}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button{margin-top:6px;margin-left:1%;margin-right:2%;width:47%;float:right}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button{color:#333;width:100%;padding:6px 12px;margin-bottom:0}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:hover{text-shadow:None;font-weight:400}:host .nameserver-history-all .toolbar-chart .port-selection .port-load-button button:disabled{box-shadow:none}:host .nameserver-history-all .toolbar-chart .chart-operation{width:20%;height:48px;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation .left{margin-right:1%;width:49%;height:100%;float:left}:host .nameserver-history-all .toolbar-chart .chart-operation .right{width:50%;height:100%;float:right}:host .nameserver-history-all .toolbar-chart .chart-operation button{width:100%;height:100%;color:#00008b}:host .nameserver-history-all .nameserver-history-content{width:100%;height:730px;margin:5px 5px 5px 0}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-chart{width:75%;height:100%;position:relative;float:left}:host .nameserver-history-all .nameserver-history-content .nameserver-history-content-controller{width:25%;height:100%;float:right;overflow:auto}:host .message-container{width:98%;margin:0 1%;box-sizing:border-box;display:inline-block}\n"] }]
|
|
2978
3092
|
}], ctorParameters: () => [{ type: FileService }, { type: ChartService }, { type: UIService }], propDecorators: { nameserverHistoryAllRef: [{
|
|
2979
3093
|
type: ViewChild,
|
|
2980
3094
|
args: ['nameserverHistoryAll', { read: ElementRef }]
|
|
@@ -2997,11 +3111,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
2997
3111
|
type: Input
|
|
2998
3112
|
}], autoDisplay: [{
|
|
2999
3113
|
type: Input
|
|
3114
|
+
}], servicePortInfo: [{
|
|
3115
|
+
type: Input
|
|
3116
|
+
}], timezoneChange: [{
|
|
3117
|
+
type: Output
|
|
3000
3118
|
}] } });
|
|
3001
3119
|
|
|
3002
3120
|
/**
|
|
3003
3121
|
* Generated bundle index. Do not edit.
|
|
3004
3122
|
*/
|
|
3005
3123
|
|
|
3006
|
-
export { NameServerHistoryComponent };
|
|
3124
|
+
export { NameServerHistoryComponent, supportedTimezones };
|
|
3007
3125
|
//# sourceMappingURL=ngx-hana-nameserver-history-viewer.mjs.map
|