@esfaenza/admin-module 11.2.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.
Files changed (83) hide show
  1. package/README.md +24 -0
  2. package/bundles/esfaenza-admin-module.umd.js +1667 -0
  3. package/bundles/esfaenza-admin-module.umd.js.map +1 -0
  4. package/bundles/esfaenza-admin-module.umd.min.js +16 -0
  5. package/bundles/esfaenza-admin-module.umd.min.js.map +1 -0
  6. package/esfaenza-admin-module.d.ts +17 -0
  7. package/esfaenza-admin-module.metadata.json +1 -0
  8. package/esm2015/esfaenza-admin-module.js +18 -0
  9. package/esm2015/lib/admin-module.module.js +89 -0
  10. package/esm2015/lib/communications/base/BaseModuleCommunicationsConsumer.js +3 -0
  11. package/esm2015/lib/components/audits/adm_audits.component.js +109 -0
  12. package/esm2015/lib/components/audits/adm_audits.component.loc.js +30 -0
  13. package/esm2015/lib/components/enqueues/adm_enq.component.js +91 -0
  14. package/esm2015/lib/components/enqueues/adm_enq.component.loc.js +19 -0
  15. package/esm2015/lib/components/logs/adm_logs.component.js +37 -0
  16. package/esm2015/lib/components/metrics/metrics_search.component.js +177 -0
  17. package/esm2015/lib/components/metrics/metrics_search.component.loc.js +23 -0
  18. package/esm2015/lib/components/profiler/adm_profiler.component.js +108 -0
  19. package/esm2015/lib/components/profiler/adm_profiler.component.loc.js +33 -0
  20. package/esm2015/lib/components/topact/topact_search.component.js +191 -0
  21. package/esm2015/lib/components/topact/topact_search.component.loc.js +32 -0
  22. package/esm2015/lib/components/workers/adm_wrk.component.js +182 -0
  23. package/esm2015/lib/components/workers/adm_wrk.component.loc.js +33 -0
  24. package/esm2015/lib/models/components/ActiveSession.js +3 -0
  25. package/esm2015/lib/models/components/Audit.js +3 -0
  26. package/esm2015/lib/models/components/AuditsView.js +9 -0
  27. package/esm2015/lib/models/components/DirectorInfos.js +3 -0
  28. package/esm2015/lib/models/components/LocksView.js +5 -0
  29. package/esm2015/lib/models/components/Metric.js +3 -0
  30. package/esm2015/lib/models/components/MetricChart.js +4 -0
  31. package/esm2015/lib/models/components/MetricsView.js +5 -0
  32. package/esm2015/lib/models/components/ProcessesView.js +5 -0
  33. package/esm2015/lib/models/components/ProfilerDataNode.js +76 -0
  34. package/esm2015/lib/models/components/ProfilerDataNode.loc.js +20 -0
  35. package/esm2015/lib/models/components/ProfilerDataNodesView.js +5 -0
  36. package/esm2015/lib/models/components/TopActivitiesDataView.js +5 -0
  37. package/esm2015/lib/models/components/TopActivity.js +3 -0
  38. package/esm2015/lib/models/components/TopNode.js +3 -0
  39. package/esm2015/lib/models/components/TopSession.js +3 -0
  40. package/esm2015/lib/models/externals/Repository.js +21 -0
  41. package/esm2015/lib/models/shared/KeyValue.js +7 -0
  42. package/esm2015/lib/models/shared/Locale.js +2 -0
  43. package/esm2015/lib/tokens.js +4 -0
  44. package/esm2015/public-api.js +4 -0
  45. package/fesm2015/esfaenza-admin-module.js +1176 -0
  46. package/fesm2015/esfaenza-admin-module.js.map +1 -0
  47. package/lib/admin-module.module.d.ts +62 -0
  48. package/lib/communications/base/BaseModuleCommunicationsConsumer.d.ts +3 -0
  49. package/lib/components/audits/adm_audits.component.d.ts +29 -0
  50. package/lib/components/audits/adm_audits.component.loc.d.ts +4 -0
  51. package/lib/components/enqueues/adm_enq.component.d.ts +27 -0
  52. package/lib/components/enqueues/adm_enq.component.loc.d.ts +4 -0
  53. package/lib/components/logs/adm_logs.component.d.ts +14 -0
  54. package/lib/components/metrics/metrics_search.component.d.ts +46 -0
  55. package/lib/components/metrics/metrics_search.component.loc.d.ts +4 -0
  56. package/lib/components/profiler/adm_profiler.component.d.ts +29 -0
  57. package/lib/components/profiler/adm_profiler.component.loc.d.ts +4 -0
  58. package/lib/components/topact/topact_search.component.d.ts +58 -0
  59. package/lib/components/topact/topact_search.component.loc.d.ts +4 -0
  60. package/lib/components/workers/adm_wrk.component.d.ts +51 -0
  61. package/lib/components/workers/adm_wrk.component.loc.d.ts +4 -0
  62. package/lib/models/components/ActiveSession.d.ts +11 -0
  63. package/lib/models/components/Audit.d.ts +13 -0
  64. package/lib/models/components/AuditsView.d.ts +14 -0
  65. package/lib/models/components/DirectorInfos.d.ts +5 -0
  66. package/lib/models/components/LocksView.d.ts +7 -0
  67. package/lib/models/components/Metric.d.ts +6 -0
  68. package/lib/models/components/MetricChart.d.ts +6 -0
  69. package/lib/models/components/MetricsView.d.ts +12 -0
  70. package/lib/models/components/ProcessesView.d.ts +8 -0
  71. package/lib/models/components/ProfilerDataNode.d.ts +19 -0
  72. package/lib/models/components/ProfilerDataNode.loc.d.ts +70 -0
  73. package/lib/models/components/ProfilerDataNodesView.d.ts +7 -0
  74. package/lib/models/components/TopActivitiesDataView.d.ts +7 -0
  75. package/lib/models/components/TopActivity.d.ts +8 -0
  76. package/lib/models/components/TopNode.d.ts +6 -0
  77. package/lib/models/components/TopSession.d.ts +15 -0
  78. package/lib/models/externals/Repository.d.ts +20 -0
  79. package/lib/models/shared/KeyValue.d.ts +5 -0
  80. package/lib/models/shared/Locale.d.ts +1 -0
  81. package/lib/tokens.d.ts +3 -0
  82. package/package.json +27 -0
  83. package/public-api.d.ts +3 -0
@@ -0,0 +1,177 @@
1
+ import { __awaiter } from "tslib";
2
+ // Angular
3
+ import { HttpParams } from "@angular/common/http";
4
+ import { Component, Inject } from "@angular/core";
5
+ import { ActivatedRoute } from "@angular/router";
6
+ import { Location } from "@angular/common";
7
+ // Configurazioni
8
+ import { LocalizationService } from "@esfaenza/localizations";
9
+ import { PreferencesService } from "@esfaenza/preferences";
10
+ import { HTTPService } from "@esfaenza/httpservice";
11
+ import { DateService } from "@esfaenza/extensions";
12
+ // Applicazione
13
+ import { BaseModuleCommunicationsConsumer } from "../../communications/base/BaseModuleCommunicationsConsumer";
14
+ import { KeyValue } from "../../models/shared/KeyValue";
15
+ import { MetricsView } from "../../models/components/MetricsView";
16
+ import { Repository } from "../../models/externals/Repository";
17
+ import { ADM_BACKEND_URL } from "../../tokens";
18
+ // Localizzazione
19
+ import { AdmMetricsLoc } from "./metrics_search.component.loc";
20
+ export class AdmMetricsComponent {
21
+ constructor(dateExts, lc, localStorage, location, _state, http, route, backend) {
22
+ this.dateExts = dateExts;
23
+ this.lc = lc;
24
+ this.localStorage = localStorage;
25
+ this.location = location;
26
+ this._state = _state;
27
+ this.http = http;
28
+ this.route = route;
29
+ this.backend = backend;
30
+ this.MetricsChartCache = {};
31
+ this.searchView = new MetricsView();
32
+ this.autoUpdate = false;
33
+ this.seconds = "5";
34
+ this.Instances = [];
35
+ this.selectedInstance = "";
36
+ this.instanceRequired = false;
37
+ this.metricsToShow = [];
38
+ this._state.handleNavigation(this.lc.loc(this.route.snapshot.data["title"]), false);
39
+ }
40
+ ngOnInit() {
41
+ this.storageSub = this.route.queryParams.subscribe(params => {
42
+ this.Init(params["ignoreStorage"]);
43
+ });
44
+ }
45
+ Init(ignoreStore) {
46
+ this.doInit(ignoreStore);
47
+ }
48
+ dateChanged() {
49
+ // Pulizia di tutti i parametri di ricerca dipendenti dalle date
50
+ this.metricsToShow = [];
51
+ this.Metrics = [];
52
+ this.instanceRequired = false;
53
+ this.Instances = [];
54
+ this.selectedInstance = "";
55
+ this.searchView.filtermetrics = [];
56
+ var pars = new HttpParams().set("from", this.searchView.filterfrom || "").set("to", this.searchView.filterto || "");
57
+ this.http.get(this.backend + Repository["GET_Adm_GetMetrics"], pars).subscribe(t => this.Metrics = t);
58
+ }
59
+ doInit(ignoreStorage) {
60
+ return __awaiter(this, void 0, void 0, function* () {
61
+ let item = yield this.localStorage.getItem("HotSearchMetrics").toPromise();
62
+ if (!ignoreStorage && item) {
63
+ this.init(item);
64
+ }
65
+ else {
66
+ this.init(null);
67
+ this.location.replaceState("/pages/adm/metrics");
68
+ this.route.snapshot.queryParams = [];
69
+ yield this.localStorage.removeItem("HotSearchMetrics").toPromise();
70
+ }
71
+ });
72
+ }
73
+ init(HotPotato) {
74
+ if (HotPotato) {
75
+ this.searchView = HotPotato;
76
+ this.POSTGetItems(this.backend + Repository["POST_Adm_GetMetrics"], this.searchView, false);
77
+ }
78
+ else {
79
+ this.searchView = new MetricsView();
80
+ this.sendSearch();
81
+ }
82
+ this.dateChanged();
83
+ }
84
+ ngOnDestroy() {
85
+ if (this.storageSub)
86
+ this.storageSub.unsubscribe();
87
+ }
88
+ sendSearch(resetPage = true, update = false, searchViewOverride = null) {
89
+ if (!update)
90
+ this.MetricsChartCache = {};
91
+ this.searchView.searchinprogress = true;
92
+ // Questa ricerca prende i nomi distinct delle metriche quindi devo prendere tutto per forza
93
+ this.searchView.itemsperpageoverride = 999999;
94
+ if (resetPage)
95
+ this.searchView.page = 1;
96
+ this.POSTGetItems(this.backend + Repository["POST_Adm_GetMetrics"], searchViewOverride !== null && searchViewOverride !== void 0 ? searchViewOverride : this.searchView, update);
97
+ }
98
+ POSTGetItems(url, data, update) {
99
+ data.filterrealtime = update ? data.filterrealtime : !(!!data.filterfrom || !!data.filterto);
100
+ this.http.post(url, data).subscribe((t) => __awaiter(this, void 0, void 0, function* () {
101
+ //Se sono in modalità di update non devo toccare la searchView attuale se non per il searchinprogress che viene messo dall'es table
102
+ if (!update) {
103
+ this.selectedInstance = "";
104
+ this.metricsToShow = [];
105
+ this.searchView = t;
106
+ this.searchView.items.forEach(m => {
107
+ if (!this.Instances.find(t => t.id == m.instance))
108
+ this.Instances.push(new KeyValue(m.instance, m.instance));
109
+ });
110
+ this.instanceRequired = this.Instances.length > 1;
111
+ if (this.Instances.length == 1) {
112
+ this.selectedInstance = this.Instances[0].id;
113
+ this.instanceSelected();
114
+ }
115
+ this.localStorage.setItem("HotSearchMetrics", this.searchView).subscribe();
116
+ }
117
+ else {
118
+ // Per ogni grafico di ogni metrica aggiungo tutti i valori che sono DOPO all'ultimo ts registrato per quel grafico
119
+ t.items.forEach(m => {
120
+ m.values.forEach(c => {
121
+ let refm = this.MetricsChartCache[this.metricKey(m, c)];
122
+ if (refm) {
123
+ c.series.forEach(s => { s.values = s.values.filter(v => this.dateExts.getDateConvertion(v.d).isAfter(refm.lastTs)); });
124
+ if (c.series.some(t => t.values.length > 0)) {
125
+ refm.lastTs = c.series.map(t => dayjs.max(t.values.map(v => this.dateExts.getDateConvertion(v.d))))[0];
126
+ refm.chart.addData(c);
127
+ }
128
+ }
129
+ });
130
+ });
131
+ }
132
+ this.searchView.searchinprogress = false;
133
+ }));
134
+ }
135
+ instanceSelected() {
136
+ if (!this.selectedInstance)
137
+ return;
138
+ this.metricsToShow = this.searchView.items.filter(t => t.instance == this.selectedInstance);
139
+ }
140
+ linkChartToMetric(metric, metricChart, chartComp) {
141
+ this.MetricsChartCache[this.metricKey(metric, metricChart)] = { chart: chartComp, lastTs: metricChart.series.map(t => dayjs.max(t.values.map(v => this.dateExts.getDateConvertion(v.d))))[0] };
142
+ }
143
+ metricKey(metric, value) {
144
+ return metric.name + " - " + value.xtitle + " - " + metric.instance;
145
+ }
146
+ autoUpdateChanged() {
147
+ if (!/^[1-9]\d*$/.test(this.seconds))
148
+ this.seconds = '10';
149
+ const secondsInMs = parseInt(this.seconds, null) * 1000;
150
+ if (this.autoUpdate) {
151
+ this.sendSearch(false, true);
152
+ this.updateTimer = setInterval(() => { this.sendSearch(false, true); }, secondsInMs);
153
+ }
154
+ else
155
+ clearInterval(this.updateTimer);
156
+ }
157
+ }
158
+ AdmMetricsComponent.decorators = [
159
+ { type: Component, args: [{
160
+ selector: "metrics_search",
161
+ providers: [
162
+ { provide: LocalizationService, useClass: AdmMetricsLoc }
163
+ ],
164
+ template: "<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card app-overflow-visible\" widget>\r\n <div class=\"card-header\">\r\n <span class=\"text-uppercase\">\r\n {{'System Metrics' | localize : lc}}\r\n </span>\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <div class=\"col-md-12\">\r\n <form role=\"form\">\r\n <div class=\"row\">\r\n <div class=\"col-md-11\">\r\n <div class=\"col-md-12 row app-no-padding app-first-filter-line\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-datetime [Readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterfrom\" name=\"filterfrom\" [Placeholder]=\"'From' | localize : lc\" (inputChange)=\"dateChanged();\"></form-datetime>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-datetime [Readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterto\" name=\"filterto\" [Placeholder]=\"'To' | localize : lc\" (inputChange)=\"dateChanged();\"></form-datetime>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-input [Readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtersid\" name=\"filtersid\" [Placeholder]=\"'Session ID' | localize : lc\"></form-input>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-input [Readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterserial\" name=\"filterserial\" [Placeholder]=\"'Session Serial' | localize : lc\"></form-input>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 row app-no-padding\">\r\n <div class=\"col-12 app-filter-wrapper\">\r\n <form-multiselect [Readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtermetrics\" [IdField]=\"'name'\" [Display]=\"'{name}'\" name=\"filtermetrics\" [SelectLabel]=\"'Filter Metrics...' | localize : lc\" [Source]=\"Metrics\"></form-multiselect>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n <div class=\"col-md-1 app-no-padding\">\r\n <button [disabled]=\"searchView.searchinprogress || autoUpdate\" class=\"input-group-addon btn app-btn-search\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </form>\r\n <div class=\"app-col-12 app-margin-top-15\">\r\n <div class=\"pull-right\">\r\n {{'Update every' | localize : lc}}&nbsp;<input [readonly]=\"autoUpdate\" maxlength=\"3\" class=\"form-control app-updevery-input\" type=\"text\" [(ngModel)]=\"seconds\" />&nbsp;{{'second/s' | localize : lc}}\r\n </div>\r\n <div class=\"pull-right m-t-2 app-margin-right-5\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" [(ngModel)]=\"autoUpdate\" (ngModelChange)=\"autoUpdateChanged();\" />\r\n <div class=\"slider round\"></div>\r\n </label>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Loading Data' | localize : lc}}</em></p>\r\n <div *ngIf=\"searchView && instanceRequired\">\r\n <form-select [Validation]=\"false\" [Label]=\"'Metrics Instance' | localize : lc\" [(ngModel)]=\"selectedInstance\" name=\"instance\" [Source]=\"Instances\" (inputChange)=\"instanceSelected()\" required></form-select>\r\n </div>\r\n <div *ngIf=\"searchView && metricsToShow && metricsToShow.length > 0\">\r\n <div class=\"col-md-12 app-padding-right-0 row app-margin-top-15\">\r\n <ng-container *ngFor=\"let metric of metricsToShow; let i = index\">\r\n <div class=\"col-md-4 app-no-padding app-simple-border\" *ngFor=\"let chart of metric.values; let z = index\">\r\n <div style=\"width: 100%; height: 260px\">\r\n <es-line-chart [XTitle]=\"chart.xtitle\"\r\n [YTitle]=\"chart.ytitle\"\r\n [MinGridDistance]=\"65\"\r\n [Timeline]=\"false\"\r\n [LegendPadding]=\"{top: 0, bottom: 7, right: 0, left: 10}\"\r\n [MergeDatasets]=\"true\"\r\n [Data]=\"chart\"\r\n [Animations]=\"true\"\r\n [Legend]=\"chart.legend\"\r\n name=\"metric_{{i}}_chart_{{z}}\"\r\n (chartLoaded)=\"linkChartToMetric(metric, chart, $event);\"\r\n [DataGroupingThreshold]=\"99999999\">\r\n </es-line-chart>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>"
165
+ },] }
166
+ ];
167
+ AdmMetricsComponent.ctorParameters = () => [
168
+ { type: DateService },
169
+ { type: LocalizationService },
170
+ { type: PreferencesService },
171
+ { type: Location },
172
+ { type: BaseModuleCommunicationsConsumer },
173
+ { type: HTTPService },
174
+ { type: ActivatedRoute },
175
+ { type: String, decorators: [{ type: Inject, args: [ADM_BACKEND_URL,] }] }
176
+ ];
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljc19zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9tZXRyaWNzL21ldHJpY3Nfc2VhcmNoLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELGVBQWU7QUFDZixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUM5RyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRS9DLGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFXL0QsTUFBTSxPQUFPLG1CQUFtQjtJQVc1QixZQUNXLFFBQXFCLEVB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dGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9sb2NhbGl6YXRpb25zXCI7XHJcbmltcG9ydCB7IFByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvcHJlZmVyZW5jZXNcIjtcclxuaW1wb3J0IHsgQmFzZUNoYXJ0Q29tcG9uZW50IH0gZnJvbSBcIkBlc2ZhZW56YS9lcy1jaGFydHNcIjtcclxuaW1wb3J0IHsgSFRUUFNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2h0dHBzZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERhdGVTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgQmFzZU1vZHVsZUNvbW11bmljYXRpb25zQ29uc3VtZXIgfSBmcm9tIFwiLi4vLi4vY29tbXVuaWNhdGlvbnMvYmFzZS9CYXNlTW9kdWxlQ29tbXVuaWNhdGlvbnNDb25zdW1lclwiO1xyXG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc2hhcmVkL0tleVZhbHVlXCI7XHJcbmltcG9ydCB7IE1ldHJpYyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29tcG9uZW50cy9NZXRyaWNcIjtcclxuaW1wb3J0IHsgTWV0cmljQ2hhcnQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbXBvbmVudHMvTWV0cmljQ2hhcnRcIjtcclxuaW1wb3J0IHsgTWV0cmljc1ZpZXcgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbXBvbmVudHMvTWV0cmljc1ZpZXdcIjtcclxuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZXh0ZXJuYWxzL1JlcG9zaXRvcnlcIjtcclxuaW1wb3J0IHsgQURNX0JBQ0tFTkRfVVJMIH0gZnJvbSBcIi4uLy4uL3Rva2Vuc1wiO1xyXG5cclxuLy8gTG9jYWxpenphemlvbmVcclxuaW1wb3J0IHsgQWRtTWV0cmljc0xvYyB9IGZyb20gXCIuL21ldHJpY3Nfc2VhcmNoLmNvbXBvbmVudC5sb2NcIjtcclxuXHJcbmRlY2xhcmUgdmFyIGRheWpzOiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcIm1ldHJpY3Nfc2VhcmNoXCIsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7IHByb3ZpZGU6IExvY2FsaXphdGlvblNlcnZpY2UsIHVzZUNsYXNzOiBBZG1NZXRyaWNzTG9jIH1cclxuICAgIF0sXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL21ldHJpY3Nfc2VhcmNoLmNvbXBvbmVudC5odG1sXCJcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkbU1ldHJpY3NDb21wb25lbnQge1xyXG5cclxuICAgIHB1YmxpYyBNZXRyaWNzOiBNZXRyaWNbXTtcclxuICAgIHByaXZhdGUgTWV0cmljc0NoYXJ0Q2FjaGU6IHsgW25hbWU6IHN0cmluZ106IHsgY2hhcnQ6IEJhc2VDaGFydENvbXBvbmVudCwgbGFzdFRzOiBEYXRlIH0gfSA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hWaWV3OiBNZXRyaWNzVmlldyA9IG5ldyBNZXRyaWNzVmlldygpO1xyXG4gICAgcHVibGljIHN0b3JhZ2VTdWI6IGFueTtcclxuXHJcbiAgICBwdWJsaWMgYXV0b1VwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNlY29uZHM6IHN0cmluZyA9IFwiNVwiO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBkYXRlRXh0czogRGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlOiBQcmVmZXJlbmNlc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXHJcbiAgICAgICAgcHJpdmF0ZSBfc3RhdGU6IEJhc2VNb2R1bGVDb21tdW5pY2F0aW9uc0NvbnN1bWVyLFxyXG4gICAgICAgIHByaXZhdGUgaHR0cDogSFRUUFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgQEluamVjdChBRE1fQkFDS0VORF9VUkwpIHByaXZhdGUgYmFja2VuZDogc3RyaW5nKSB7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXRlLmhhbmRsZU5hdmlnYXRpb24odGhpcy5sYy5sb2ModGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhW1widGl0bGVcIl0pLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU3ViID0gdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5Jbml0KHBhcmFtc1tcImlnbm9yZVN0b3JhZ2VcIl0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEluaXQoaWdub3JlU3RvcmUpIHtcclxuICAgICAgICB0aGlzLmRvSW5pdChpZ25vcmVTdG9yZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGF0ZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgLy8gUHVsaXppYSBkaSB0dXR0aSBpIHBhcmFtZXRyaSBkaSByaWNlcmNhIGRpcGVuZGVudGkgZGFsbGUgZGF0ZVxyXG4gICAgICAgIHRoaXMubWV0cmljc1RvU2hvdyA9IFtdO1xyXG4gICAgICAgIHRoaXMuTWV0cmljcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuaW5zdGFuY2VSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuSW5zdGFuY2VzID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluc3RhbmNlID0gXCJcIjtcclxuICAgICAgICB0aGlzLnNlYXJjaFZpZXcuZmlsdGVybWV0cmljcyA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgcGFycyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KFwiZnJvbVwiLCB0aGlzLnNlYXJjaFZpZXcuZmlsdGVyZnJvbSB8fCBcIlwiKS5zZXQoXCJ0b1wiLCB0aGlzLnNlYXJjaFZpZXcuZmlsdGVydG8gfHwgXCJcIilcclxuICAgICAgICB0aGlzLmh0dHAuZ2V0PE1ldHJpY1tdPih0aGlzLmJhY2tlbmQgKyBSZXBvc2l0b3J5W1wiR0VUX0FkbV9HZXRNZXRyaWNzXCJdLCBwYXJzKS5zdWJzY3JpYmUodCA9PiB0aGlzLk1ldHJpY3MgPSB0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkb0luaXQoaWdub3JlU3RvcmFnZSkge1xyXG4gICAgICAgIGxldCBpdGVtID0gYXdhaXQgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbTxNZXRyaWNzVmlldz4oXCJIb3RTZWFyY2hNZXRyaWNzXCIpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGlmICghaWdub3JlU3RvcmFnZSAmJiBpdGVtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdChpdGVtKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmluaXQobnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKFwiL3BhZ2VzL2FkbS9tZXRyaWNzXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zID0gW107XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJIb3RTZWFyY2hNZXRyaWNzXCIpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbml0KEhvdFBvdGF0bzogTWV0cmljc1ZpZXcpIHtcclxuICAgICAgICBpZiAoSG90UG90YXRvKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmlldyA9IEhvdFBvdGF0bztcclxuICAgICAgICAgICAgdGhpcy5QT1NUR2V0SXRlbXModGhpcy5iYWNrZW5kICsgUmVwb3NpdG9yeVtcIlBPU1RfQWRtX0dldE1ldHJpY3NcIl0sIHRoaXMuc2VhcmNoVmlldywgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hWaWV3ID0gbmV3IE1ldHJpY3NWaWV3KCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZFNlYXJjaCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhdGVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RvcmFnZVN1YilcclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VuZFNlYXJjaChyZXNldFBhZ2U6IGJvb2xlYW4gPSB0cnVlLCB1cGRhdGU6IGJvb2xlYW4gPSBmYWxzZSwgc2VhcmNoVmlld092ZXJyaWRlOiBNZXRyaWNzVmlldyA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXVwZGF0ZSlcclxuICAgICAgICAgICAgdGhpcy5NZXRyaWNzQ2hhcnRDYWNoZSA9IHt9O1xyXG5cclxuICAgICAgICB0aGlzLnNlYXJjaFZpZXcuc2VhcmNoaW5wcm9ncmVzcyA9IHRydWU7XHJcbiAgICAgICAgLy8gUXVlc3RhIHJpY2VyY2EgcHJlbmRlIGkgbm9taSBkaXN0aW5jdCBkZWxsZSBtZXRyaWNoZSBxdWluZGkgZGV2byBwcmVuZGVyZSB0dXR0byBwZXIgZm9yemFcclxuICAgICAgICB0aGlzLnNlYXJjaFZpZXcuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgPSA5OTk5OTk7XHJcbiAgICAgICAgaWYgKHJlc2V0UGFnZSlcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hWaWV3LnBhZ2UgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLlBPU1RHZXRJdGVtcyh0aGlzLmJhY2tlbmQgKyBSZXBvc2l0b3J5W1wiUE9TVF9BZG1fR2V0TWV0cmljc1wiXSwgc2VhcmNoVmlld092ZXJyaWRlID8/IHRoaXMuc2VhcmNoVmlldywgdXBkYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgSW5zdGFuY2VzOiBLZXlWYWx1ZVtdID0gW11cclxuICAgIHB1YmxpYyBzZWxlY3RlZEluc3RhbmNlID0gXCJcIjtcclxuICAgIHB1YmxpYyBpbnN0YW5jZVJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbWV0cmljc1RvU2hvdzogTWV0cmljW10gPSBbXTtcclxuXHJcbiAgICBQT1NUR2V0SXRlbXModXJsOiBzdHJpbmcsIGRhdGE6IE1ldHJpY3NWaWV3LCB1cGRhdGU6IGJvb2xlYW4pIHtcclxuICAgICAgICBkYXRhLmZpbHRlcnJlYWx0aW1lID0gdXBkYXRlID8gZGF0YS5maWx0ZXJyZWFsdGltZSA6ICEoISFkYXRhLmZpbHRlcmZyb20gfHwgISFkYXRhLmZpbHRlcnRvKTtcclxuXHJcbiAgICAgICAgdGhpcy5odHRwLnBvc3Q8TWV0cmljc1ZpZXc+KHVybCwgZGF0YSkuc3Vic2NyaWJlKGFzeW5jICh0KSA9PiB7XHJcbiAgICAgICAgICAgIC8vU2Ugc29ubyBpbiBtb2RhbGl0w6AgZGkgdXBkYXRlIG5vbiBkZXZvIHRvY2NhcmUgbGEgc2VhcmNoVmlldyBhdHR1YWxlIHNlIG5vbiBwZXIgaWwgc2VhcmNoaW5wcm9ncmVzcyBjaGUgdmllbmUgbWVzc28gZGFsbCdlcyB0YWJsZVxyXG4gICAgICAgICAgICBpZiAoIXVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluc3RhbmNlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMubWV0cmljc1RvU2hvdyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hWaWV3ID0gdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVmlldy5pdGVtcy5mb3JFYWNoKG0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5JbnN0YW5jZXMuZmluZCh0ID0+IHQuaWQgPT0gbS5pbnN0YW5jZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuSW5zdGFuY2VzLnB1c2gobmV3IEtleVZhbHVlKG0uaW5zdGFuY2UsIG0uaW5zdGFuY2UpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZVJlcXVpcmVkID0gdGhpcy5JbnN0YW5jZXMubGVuZ3RoID4gMTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLkluc3RhbmNlcy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbnN0YW5jZSA9IHRoaXMuSW5zdGFuY2VzWzBdLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VTZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIkhvdFNlYXJjaE1ldHJpY3NcIiwgdGhpcy5zZWFyY2hWaWV3KS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIFBlciBvZ25pIGdyYWZpY28gZGkgb2duaSBtZXRyaWNhIGFnZ2l1bmdvIHR1dHRpIGkgdmFsb3JpIGNoZSBzb25vIERPUE8gYWxsJ3VsdGltbyB0cyByZWdpc3RyYXRvIHBlciBxdWVsIGdyYWZpY29cclxuICAgICAgICAgICAgICAgIHQuaXRlbXMuZm9yRWFjaChtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBtLnZhbHVlcy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVmbSA9IHRoaXMuTWV0cmljc0NoYXJ0Q2FjaGVbdGhpcy5tZXRyaWNLZXkobSwgYyldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5zZXJpZXMuZm9yRWFjaChzID0+IHsgcy52YWx1ZXMgPSBzLnZhbHVlcy5maWx0ZXIodiA9PiB0aGlzLmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKHYuZCkuaXNBZnRlcihyZWZtLmxhc3RUcykpOyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjLnNlcmllcy5zb21lKHQgPT4gdC52YWx1ZXMubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZtLmxhc3RUcyA9IGMuc2VyaWVzLm1hcCh0ID0+IGRheWpzLm1heCh0LnZhbHVlcy5tYXAodiA9PiB0aGlzLmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKHYuZCkpKSlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmbS5jaGFydC5hZGREYXRhKGMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZpZXcuc2VhcmNoaW5wcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGluc3RhbmNlU2VsZWN0ZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkSW5zdGFuY2UpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5tZXRyaWNzVG9TaG93ID0gdGhpcy5zZWFyY2hWaWV3Lml0ZW1zLmZpbHRlcih0ID0+IHQuaW5zdGFuY2UgPT0gdGhpcy5zZWxlY3RlZEluc3RhbmNlKTtcclxuICAgIH1cclxuXHJcbiAgICBsaW5rQ2hhcnRUb01ldHJpYyhtZXRyaWM6IE1ldHJpYywgbWV0cmljQ2hhcnQ6IE1ldHJpY0NoYXJ0LCBjaGFydENvbXA6IEJhc2VDaGFydENvbXBvbmVudCkge1xyXG4gICAgICAgIHRoaXMuTWV0cmljc0NoYXJ0Q2FjaGVbdGhpcy5tZXRyaWNLZXkobWV0cmljLCBtZXRyaWNDaGFydCldID0geyBjaGFydDogY2hhcnRDb21wLCBsYXN0VHM6IG1ldHJpY0NoYXJ0LnNlcmllcy5tYXAodCA9PiBkYXlqcy5tYXgodC52YWx1ZXMubWFwKHYgPT4gdGhpcy5kYXRlRXh0cy5nZXREYXRlQ29udmVydGlvbih2LmQpKSkpWzBdIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtZXRyaWNLZXkobWV0cmljOiBNZXRyaWMsIHZhbHVlOiBNZXRyaWNDaGFydCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIG1ldHJpYy5uYW1lICsgXCIgLSBcIiArIHZhbHVlLnh0aXRsZSArIFwiIC0gXCIgKyBtZXRyaWMuaW5zdGFuY2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gI3JlZ2lvbiBHZXN0aW9uZSB1cGRhdGUgYXV0b21hdGljb1xyXG4gICAgdXBkYXRlVGltZXI6IGFueTtcclxuICAgIGF1dG9VcGRhdGVDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICghL15bMS05XVxcZCokLy50ZXN0KHRoaXMuc2Vjb25kcykpXHJcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kcyA9ICcxMCc7XHJcbiAgICAgICAgY29uc3Qgc2Vjb25kc0luTXMgPSBwYXJzZUludCh0aGlzLnNlY29uZHMsIG51bGwpICogMTAwMDtcclxuICAgICAgICBpZiAodGhpcy5hdXRvVXBkYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZFNlYXJjaChmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7IHRoaXMuc2VuZFNlYXJjaChmYWxzZSwgdHJ1ZSk7IH0sIHNlY29uZHNJbk1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMudXBkYXRlVGltZXIpO1xyXG4gICAgfVxyXG4gICAgLy8gI2VuZHJlZ2lvblxyXG59Il19
@@ -0,0 +1,23 @@
1
+ import { Injectable, Inject } from "@angular/core";
2
+ import { LocalizationService } from "@esfaenza/localizations";
3
+ import { ADM_LOCALE } from "../../tokens";
4
+ export class AdmMetricsLoc extends LocalizationService {
5
+ constructor(LOC_LOCALE) {
6
+ super(LOC_LOCALE);
7
+ super.set("en->it", "System Metrics", ["Metriche di Sistema"]);
8
+ super.set("en->it", "Session ID", ["Cod. Sessione"]);
9
+ super.set("en->it", "Session Serial", ["Seriale Sessione"]);
10
+ super.set("en->it", "Filter Metrics...", ["Filtra Metriche..."]);
11
+ super.set("en->it", "Loading Data", ["Carico i Dati"]);
12
+ super.set("en->it", "Update every", ["Aggiorna ogni"]);
13
+ super.set("en->it", "second/s", ["secondo/i"]);
14
+ super.set("en->it", "Metrics Instance", ["Istanza Metriche"]);
15
+ }
16
+ }
17
+ AdmMetricsLoc.decorators = [
18
+ { type: Injectable }
19
+ ];
20
+ AdmMetricsLoc.ctorParameters = () => [
21
+ { type: String, decorators: [{ type: Inject, args: [ADM_LOCALE,] }] }
22
+ ];
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljc19zZWFyY2guY29tcG9uZW50LmxvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvbWV0cmljcy9tZXRyaWNzX3NlYXJjaC5jb21wb25lbnQubG9jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHMUMsTUFBTSxPQUFPLGFBQWMsU0FBUSxtQkFBbUI7SUFDbEQsWUFBZ0MsVUFBa0I7UUFDOUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1FBQy9ELEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDckQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDNUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDakUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUN2RCxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDL0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQzs7O1lBWkosVUFBVTs7O3lDQUVNLE1BQU0sU0FBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5cclxuaW1wb3J0IHsgQURNX0xPQ0FMRSB9IGZyb20gXCIuLi8uLi90b2tlbnNcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEFkbU1ldHJpY3NMb2MgZXh0ZW5kcyBMb2NhbGl6YXRpb25TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoQURNX0xPQ0FMRSkgTE9DX0xPQ0FMRTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoTE9DX0xPQ0FMRSk7XHJcbiAgICAgICAgc3VwZXIuc2V0KFwiZW4tPml0XCIsIFwiU3lzdGVtIE1ldHJpY3NcIiwgW1wiTWV0cmljaGUgZGkgU2lzdGVtYVwiXSk7XHJcbiAgICAgICAgc3VwZXIuc2V0KFwiZW4tPml0XCIsIFwiU2Vzc2lvbiBJRFwiLCBbXCJDb2QuIFNlc3Npb25lXCJdKTtcclxuICAgICAgICBzdXBlci5zZXQoXCJlbi0+aXRcIiwgXCJTZXNzaW9uIFNlcmlhbFwiLCBbXCJTZXJpYWxlIFNlc3Npb25lXCJdKTtcclxuICAgICAgICBzdXBlci5zZXQoXCJlbi0+aXRcIiwgXCJGaWx0ZXIgTWV0cmljcy4uLlwiLCBbXCJGaWx0cmEgTWV0cmljaGUuLi5cIl0pO1xyXG4gICAgICAgIHN1cGVyLnNldChcImVuLT5pdFwiLCBcIkxvYWRpbmcgRGF0YVwiLCBbXCJDYXJpY28gaSBEYXRpXCJdKTtcclxuICAgICAgICBzdXBlci5zZXQoXCJlbi0+aXRcIiwgXCJVcGRhdGUgZXZlcnlcIiwgW1wiQWdnaW9ybmEgb2duaVwiXSk7XHJcbiAgICAgICAgc3VwZXIuc2V0KFwiZW4tPml0XCIsIFwic2Vjb25kL3NcIiwgW1wic2Vjb25kby9pXCJdKTtcclxuICAgICAgICBzdXBlci5zZXQoXCJlbi0+aXRcIiwgXCJNZXRyaWNzIEluc3RhbmNlXCIsIFtcIklzdGFuemEgTWV0cmljaGVcIl0pO1xyXG4gICAgfVxyXG59Il19
@@ -0,0 +1,108 @@
1
+ import { __awaiter } from "tslib";
2
+ // Angular
3
+ import { Component, Inject } from "@angular/core";
4
+ import { ActivatedRoute } from "@angular/router";
5
+ import { Location } from "@angular/common";
6
+ // Configurazioni
7
+ import { LocalizationService } from "@esfaenza/localizations";
8
+ import { PreferencesService } from "@esfaenza/preferences";
9
+ import { ExportService } from "@esfaenza/extensions";
10
+ import { HTTPService } from "@esfaenza/httpservice";
11
+ // Applicazione
12
+ import { BaseModuleCommunicationsConsumer } from "../../communications/base/BaseModuleCommunicationsConsumer";
13
+ import { ProfilerDataNode } from "../../models/components/ProfilerDataNode";
14
+ import { ProfilerDataNodesView } from "../../models/components/ProfilerDataNodesView";
15
+ import { Repository } from "../../models/externals/Repository";
16
+ import { ADM_BACKEND_URL } from "../../tokens";
17
+ // Localizzazione
18
+ import { AdmProfilerComponentLoc } from "./adm_profiler.component.loc";
19
+ export class AdmProfilerComponent {
20
+ constructor(expExts, lc, localStorage, location, _state, http, route, backend) {
21
+ this.expExts = expExts;
22
+ this.lc = lc;
23
+ this.localStorage = localStorage;
24
+ this.location = location;
25
+ this._state = _state;
26
+ this.http = http;
27
+ this.route = route;
28
+ this.backend = backend;
29
+ this.searchView = new ProfilerDataNodesView();
30
+ this._state.handleNavigation(this.lc.loc(this.route.snapshot.data["title"]), false);
31
+ }
32
+ ngOnInit() {
33
+ this.storageSub = this.route.queryParams.subscribe(params => {
34
+ this.Init(params["ignoreStorage"]);
35
+ });
36
+ }
37
+ Init(ignoreStore) {
38
+ this.doInit(ignoreStore);
39
+ }
40
+ doInit(ignoreStorage) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ let item = yield this.localStorage.getItem("HotSearchProfilato").toPromise();
43
+ if (!ignoreStorage && item) {
44
+ this.init(item);
45
+ }
46
+ else {
47
+ this.init(null);
48
+ this.location.replaceState("/pages/adm/profiler");
49
+ this.route.snapshot.queryParams = [];
50
+ yield this.localStorage.removeItem("HotSearchProfilato").toPromise();
51
+ }
52
+ });
53
+ }
54
+ init(HotPotato) {
55
+ if (HotPotato) {
56
+ this.searchView = HotPotato;
57
+ this.POSTGetItems(this.backend + Repository["POST_Adm_GetProfilerDataNodes"], this.searchView);
58
+ }
59
+ else {
60
+ this.searchView = new ProfilerDataNodesView();
61
+ this.sendSearch();
62
+ }
63
+ }
64
+ ngOnDestroy() {
65
+ if (this.storageSub)
66
+ this.storageSub.unsubscribe();
67
+ }
68
+ sendSearch(resetPage = true) {
69
+ this.searchView.searchinprogress = true;
70
+ if (resetPage)
71
+ this.searchView.page = 1;
72
+ this.POSTGetItems(this.backend + Repository["POST_Adm_GetProfilerDataNodes"], this.searchView);
73
+ }
74
+ POSTGetItems(url, data) {
75
+ this.http.post(url, data).subscribe(t => {
76
+ this.searchView = t;
77
+ this.searchView.searchinprogress = false;
78
+ this.localStorage.setItem("HotSearchProfilato", this.searchView).subscribe();
79
+ });
80
+ }
81
+ prepareExport(dataCallBack) {
82
+ var view = JSON.parse(JSON.stringify(this.searchView));
83
+ view.page = 1;
84
+ view.itemsperpageoverride = 9999999;
85
+ this.http.post(this.backend + Repository["POST_Adm_GetProfilerDataNodes"], view).subscribe(t => {
86
+ let items = this.expExts.deserializeForExport(t.items, ProfilerDataNode);
87
+ dataCallBack(items);
88
+ });
89
+ }
90
+ }
91
+ AdmProfilerComponent.decorators = [
92
+ { type: Component, args: [{
93
+ selector: "adm_profiler",
94
+ providers: [{ provide: LocalizationService, useClass: AdmProfilerComponentLoc }],
95
+ template: "<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card app-overflow-visible\" widget>\r\n <div class=\"card-header\">\r\n <span class=\"text-uppercase\">{{'Server Profiler' | localize : lc}}</span>&nbsp;\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <div class=\"col-md-12 bottom-15\">\r\n <form role=\"form\">\r\n <div class=\"row app-first-filter-line\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterfrom\" name=\"filterfrom\" [Placeholder]=\"'From' | localize : lc\"></form-date>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterto\" name=\"filterto\" [Placeholder]=\"'To' | localize : lc\"></form-date>\r\n </div>\r\n <button [disabled]=\"searchView.searchinprogress\" class=\"input-group-addon btn app-btn-search app-margin-top-20\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Loading Data' | localize : lc}}</em></p>\r\n <div *ngIf=\"searchView\">\r\n <es-table [(ngModel)]=\"searchView\" [Hierarchy]=\"true\" [OrderByColumn]=\"false\" [ParentKey]=\"'parentid'\"\r\n [OwnKey]=\"'id'\" [StartsExpanded]=\"false\" [ExportFunction]=\"prepareExport.bind(this)\" [Export]=\"true\"\r\n [ExportFileName]=\"'Profiler Export.csv'\" [HidePaging]=\"true\" (onSearchRequest)=\"sendSearch($event);\">\r\n \r\n <span *th=\"'1'\">{{'ID' | localize : lc}}</span>\r\n <span *th=\"'2'\">{{'Description' | localize : lc}}</span>\r\n <span *th=\"'3'\">{{'Calls' | localize : lc}}</span>\r\n <span *th=\"'4'\">{{'Time' | localize : lc}}</span>\r\n <span *th=\"'5'\">{{'Peak Time' | localize : lc}}</span>\r\n <span *th=\"'6'\">{{'Min. Time' | localize : lc}}</span>\r\n <span *th=\"'7'\">{{'Avg. Time' | localize : lc}}</span>\r\n <span *th=\"'8'\">{{'Specific Time' | localize : lc}}</span>\r\n <span *th=\"'9'\">{{'Percentage' | localize : lc}}</span>\r\n <span *th=\"'10'\">{{'Calls for Period' | localize : lc}}</span>\r\n <span *th=\"'11'\">{{'Time for Period' | localize : lc}}</span>\r\n <span *th=\"'12'\">{{'Peak Time for Period' | localize : lc}}</span>\r\n <span *th=\"'13'\">{{'Min. Time for Period' | localize : lc}}</span>\r\n <span *th=\"'14'\">{{'Avg. Time for Period' | localize : lc}}</span>\r\n <span *th=\"'15'\">{{'Specific Time for Period' | localize : lc}}</span>\r\n <span *th=\"'16'\">{{'Percentage for Period' | localize : lc}}</span>\r\n\r\n <span *td=\"'1'; let item\">{{item.id}}</span>\r\n <span *td=\"'2'; let item\" title=\"{{item.description}}\">{{item.description.length <= 50 ? item.description : item.description.substr(0,50) + \"[...]\" }}</span>\r\n <span *td=\"'3'; let item\">{{item.calls}}</span>\r\n <span *td=\"'4'; let item\">{{item.time}}</span>\r\n <span *td=\"'5'; let item\">{{item.peaktime}}</span>\r\n <span *td=\"'6'; let item\">{{item.mintime}}</span>\r\n <span *td=\"'7'; let item\">{{item.avgtime}}</span>\r\n <span *td=\"'8'; let item\">{{item.timewithoutchildren}}</span>\r\n <span *td=\"'9'; let item\">{{item.percentage}}</span>\r\n <span *td=\"'10' let item\">{{item.snapdeltacalls}}</span>\r\n <span *td=\"'11' let item\">{{item.snapdeltatime}}</span>\r\n <span *td=\"'12' let item\">{{item.snappeaktime}}</span>\r\n <span *td=\"'13' let item\">{{item.snapmintime}}</span>\r\n <span *td=\"'14' let item\">{{item.snapavgtime}}</span>\r\n <span *td=\"'15' let item\">{{item.snaptimewithoutchildren}}</span>\r\n <span *td=\"'16' let item\">{{item.snappercentage}}</span>\r\n </es-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>"
96
+ },] }
97
+ ];
98
+ AdmProfilerComponent.ctorParameters = () => [
99
+ { type: ExportService },
100
+ { type: LocalizationService },
101
+ { type: PreferencesService },
102
+ { type: Location },
103
+ { type: BaseModuleCommunicationsConsumer },
104
+ { type: HTTPService },
105
+ { type: ActivatedRoute },
106
+ { type: String, decorators: [{ type: Inject, args: [ADM_BACKEND_URL,] }] }
107
+ ];
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtX3Byb2ZpbGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJvZmlsZXIvYWRtX3Byb2ZpbGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsaUJBQWlCO0FBQ2pCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsZUFBZTtBQUNmLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQzlHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRS9DLGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQU92RSxNQUFNLE9BQU8sb0JBQW9CO0lBSTdCLFlBQ1ksT0FBc0IsRUFDdkIsRUFBdUIsRUFDdEIsWUFBZ0MsRUFDaEMsUUFBa0IsRUFDbEIs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QkFBa0I7WUFKbEIsUUFBUTtZQVNSLGdDQUFnQztZQUhoQyxXQUFXO1lBUFgsY0FBYzt5Q0FvQ2QsTUFBTSxTQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5pbXBvcnQgeyBQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL3ByZWZlcmVuY2VzXCI7XHJcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuaW1wb3J0IHsgSFRUUFNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2h0dHBzZXJ2aWNlXCI7XHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgQmFzZU1vZHVsZUNvbW11bmljYXRpb25zQ29uc3VtZXIgfSBmcm9tIFwiLi4vLi4vY29tbXVuaWNhdGlvbnMvYmFzZS9CYXNlTW9kdWxlQ29tbXVuaWNhdGlvbnNDb25zdW1lclwiO1xyXG5pbXBvcnQgeyBQcm9maWxlckRhdGFOb2RlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb21wb25lbnRzL1Byb2ZpbGVyRGF0YU5vZGVcIjtcclxuaW1wb3J0IHsgUHJvZmlsZXJEYXRhTm9kZXNWaWV3IH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb21wb25lbnRzL1Byb2ZpbGVyRGF0YU5vZGVzVmlld1wiO1xyXG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIi4uLy4uL21vZGVscy9leHRlcm5hbHMvUmVwb3NpdG9yeVwiO1xyXG5pbXBvcnQgeyBBRE1fQkFDS0VORF9VUkwgfSBmcm9tIFwiLi4vLi4vdG9rZW5zXCI7XHJcblxyXG4vLyBMb2NhbGl6emF6aW9uZVxyXG5pbXBvcnQgeyBBZG1Qcm9maWxlckNvbXBvbmVudExvYyB9IGZyb20gXCIuL2FkbV9wcm9maWxlci5jb21wb25lbnQubG9jXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImFkbV9wcm9maWxlclwiLFxyXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCB1c2VDbGFzczogQWRtUHJvZmlsZXJDb21wb25lbnRMb2MgfV0sXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2FkbV9wcm9maWxlci5jb21wb25lbnQuaHRtbFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZG1Qcm9maWxlckNvbXBvbmVudCB7XHJcbiAgICBwdWJsaWMgc2VhcmNoVmlldzogUHJvZmlsZXJEYXRhTm9kZXNWaWV3ID0gbmV3IFByb2ZpbGVyRGF0YU5vZGVzVmlldygpO1xyXG4gICAgcHVibGljIHN0b3JhZ2VTdWI6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGV4cEV4dHM6IEV4cG9ydFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlOiBQcmVmZXJlbmNlc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXHJcbiAgICAgICAgcHJpdmF0ZSBfc3RhdGU6IEJhc2VNb2R1bGVDb21tdW5pY2F0aW9uc0NvbnN1bWVyLFxyXG4gICAgICAgIHByaXZhdGUgaHR0cDogSFRUUFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgQEluamVjdChBRE1fQkFDS0VORF9VUkwpIHByaXZhdGUgYmFja2VuZDogc3RyaW5nKSB7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXRlLmhhbmRsZU5hdmlnYXRpb24odGhpcy5sYy5sb2ModGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhW1widGl0bGVcIl0pLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU3ViID0gdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5Jbml0KHBhcmFtc1tcImlnbm9yZVN0b3JhZ2VcIl0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEluaXQoaWdub3JlU3RvcmUpIHtcclxuICAgICAgICB0aGlzLmRvSW5pdChpZ25vcmVTdG9yZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZG9Jbml0KGlnbm9yZVN0b3JhZ2UpIHtcclxuICAgICAgICBsZXQgaXRlbSA9IGF3YWl0IHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW08UHJvZmlsZXJEYXRhTm9kZXNWaWV3PihcIkhvdFNlYXJjaFByb2ZpbGF0b1wiKS50b1Byb21pc2UoKTtcclxuICAgICAgICBpZiAoIWlnbm9yZVN0b3JhZ2UgJiYgaXRlbSkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoaXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0KG51bGwpO1xyXG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShcIi9wYWdlcy9hZG0vcHJvZmlsZXJcIik7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgPSBbXTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcIkhvdFNlYXJjaFByb2ZpbGF0b1wiKS50b1Byb21pc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdChIb3RQb3RhdG86IFByb2ZpbGVyRGF0YU5vZGVzVmlldykge1xyXG4gICAgICAgIGlmIChIb3RQb3RhdG8pIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hWaWV3ID0gSG90UG90YXRvO1xyXG4gICAgICAgICAgICB0aGlzLlBPU1RHZXRJdGVtcyh0aGlzLmJhY2tlbmQgKyBSZXBvc2l0b3J5W1wiUE9TVF9BZG1fR2V0UHJvZmlsZXJEYXRhTm9kZXNcIl0sIHRoaXMuc2VhcmNoVmlldyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZpZXcgPSBuZXcgUHJvZmlsZXJEYXRhTm9kZXNWaWV3KCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZFNlYXJjaCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zdG9yYWdlU3ViKVxyXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2VTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kU2VhcmNoKHJlc2V0UGFnZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFZpZXcuc2VhcmNoaW5wcm9ncmVzcyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHJlc2V0UGFnZSlcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hWaWV3LnBhZ2UgPSAxO1xyXG5cclxuICAgICAgICB0aGlzLlBPU1RHZXRJdGVtcyh0aGlzLmJhY2tlbmQgKyBSZXBvc2l0b3J5W1wiUE9TVF9BZG1fR2V0UHJvZmlsZXJEYXRhTm9kZXNcIl0sIHRoaXMuc2VhcmNoVmlldyk7XHJcbiAgICB9XHJcblxyXG4gICAgUE9TVEdldEl0ZW1zKHVybDogc3RyaW5nLCBkYXRhOiBQcm9maWxlckRhdGFOb2Rlc1ZpZXcpIHtcclxuICAgICAgICB0aGlzLmh0dHAucG9zdDxQcm9maWxlckRhdGFOb2Rlc1ZpZXc+KHVybCwgZGF0YSkuc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZpZXcgPSB0O1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZpZXcuc2VhcmNoaW5wcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiSG90U2VhcmNoUHJvZmlsYXRvXCIsIHRoaXMuc2VhcmNoVmlldykuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlcGFyZUV4cG9ydChkYXRhQ2FsbEJhY2spIHtcclxuICAgICAgICB2YXIgdmlldyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZWFyY2hWaWV3KSk7XHJcbiAgICAgICAgdmlldy5wYWdlID0gMTtcclxuICAgICAgICB2aWV3Lml0ZW1zcGVycGFnZW92ZXJyaWRlID0gOTk5OTk5OTtcclxuICAgICAgICB0aGlzLmh0dHAucG9zdDxQcm9maWxlckRhdGFOb2Rlc1ZpZXc+KHRoaXMuYmFja2VuZCArIFJlcG9zaXRvcnlbXCJQT1NUX0FkbV9HZXRQcm9maWxlckRhdGFOb2Rlc1wiXSwgdmlldykuc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXRlbXM6IFByb2ZpbGVyRGF0YU5vZGVbXSA9IHRoaXMuZXhwRXh0cy5kZXNlcmlhbGl6ZUZvckV4cG9ydCh0Lml0ZW1zLCBQcm9maWxlckRhdGFOb2RlKTtcclxuICAgICAgICAgICAgZGF0YUNhbGxCYWNrKGl0ZW1zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSJdfQ==
@@ -0,0 +1,33 @@
1
+ import { Injectable, Inject } from "@angular/core";
2
+ import { LocalizationService } from "@esfaenza/localizations";
3
+ import { ADM_LOCALE } from "../../tokens";
4
+ export class AdmProfilerComponentLoc extends LocalizationService {
5
+ constructor(LOC_LOCALE) {
6
+ super(LOC_LOCALE);
7
+ super.set("en->it", "Server Profiler", ["Profiler del Server"]);
8
+ super.set("en->it", "Loading Data", ["Carico i Dati"]);
9
+ super.set("en->it", "ID", ["ID"]);
10
+ super.set("en->it", "Description", ["Descrizione"]);
11
+ super.set("en->it", "Calls", ["Chiamate"]);
12
+ super.set("en->it", "Time", ["Tempo"]);
13
+ super.set("en->it", "Peak Time", ["Tempo Max"]);
14
+ super.set("en->it", "Min. Time", ["Tempo Min"]);
15
+ super.set("en->it", "Avg. Time", ["Tempo Medio"]);
16
+ super.set("en->it", "Specific Time", ["Tempo Specifico"]);
17
+ super.set("en->it", "Percentage", ["Percentuale"]);
18
+ super.set("en->it", "Calls for Period", ["Chiamate Periodo"]);
19
+ super.set("en->it", "Time for Period", ["Tempo Periodo"]);
20
+ super.set("en->it", "Peak Time for Period", ["Tempo Max Periodo"]);
21
+ super.set("en->it", "Min. Time for Period", ["Tempo Min Periodo"]);
22
+ super.set("en->it", "Avg. Time for Period", ["Tempo Medio Periodo"]);
23
+ super.set("en->it", "Specific Time for Period", ["Tempo Specifico Periodo"]);
24
+ super.set("en->it", "Percentage for Period", ["Percentuale Periodo"]);
25
+ }
26
+ }
27
+ AdmProfilerComponentLoc.decorators = [
28
+ { type: Injectable }
29
+ ];
30
+ AdmProfilerComponentLoc.ctorParameters = () => [
31
+ { type: String, decorators: [{ type: Inject, args: [ADM_LOCALE,] }] }
32
+ ];
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtX3Byb2ZpbGVyLmNvbXBvbmVudC5sb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3Byb2ZpbGVyL2FkbV9wcm9maWxlci5jb21wb25lbnQubG9jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHMUMsTUFBTSxPQUFPLHVCQUF3QixTQUFRLG1CQUFtQjtJQUM1RCxZQUFnQyxVQUFrQjtRQUM5QyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7UUFDaEUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUN2RCxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDcEQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUMzQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDaEQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNoRCxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ2xELEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUMxRCxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ25ELEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQzlELEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUMxRCxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUNuRSxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUNuRSxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUNyRSxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSwwQkFBMEIsRUFBRSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztRQUM3RSxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDOzs7WUF2QkosVUFBVTs7O3lDQUVNLE1BQU0sU0FBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5cclxuaW1wb3J0IHsgQURNX0xPQ0FMRSB9IGZyb20gXCIuLi8uLi90b2tlbnNcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEFkbVByb2ZpbGVyQ29tcG9uZW50TG9jIGV4dGVuZHMgTG9jYWxpemF0aW9uU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KEFETV9MT0NBTEUpIExPQ19MT0NBTEU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKExPQ19MT0NBTEUpO1xyXG5cclxuICAgICAgICBzdXBlci5zZXQoXCJlbi0+aXRcIiwgXCJTZXJ2ZXIgUHJvZmlsZXJcIiwgW1wiUHJvZmlsZXIgZGVsIFNlcnZlclwiXSk7XHJcbiAgICAgICAgc3VwZXIuc2V0KFwiZW4tPml0XCIsIFwiTG9hZGluZyBEYXRhXCIsIFtcIkNhcmljbyBpIERhdGlcIl0pO1xyXG4gICAgICAgIHN1cGVyLnNldChcImVuLT5pdFwiLCBcIklEXCIsIFtcIklEXCJdKTtcclxuICAgICAgICBzdXBlci5zZXQoXCJlbi0+aXRcIiwgXCJEZXNjcmlwdGlvblwiLCBbXCJEZXNjcml6aW9uZVwiXSk7XHJcbiAgICAgICAgc3VwZXIuc2V0KFwiZW4tPml0XCIsIFwiQ2FsbHNcIiwgW1wiQ2hpYW1hdGVcIl0pO1xyXG4gICAgICAgIHN1cGVyLnNldChcImVuLT5pdFwiLCBcIlRpbWVcIiwgW1wiVGVtcG9cIl0pO1xyXG4gICAgICAgIHN1cGVyLnNldChcImVuLT5pdFwiLCBcIlBlYWsgVGltZVwiLCBbXCJUZW1wbyBNYXhcIl0pO1xyXG4gICAgICAgIHN1cGVyLnNldChcImVuLT5pdFwiLCBcIk1pbi4gVGltZVwiLCBbXCJUZW1wbyBNaW5cIl0pO1xyXG4gICAgICAgIHN1cGVyLnNldChcImVuLT5pdFwiLCBcIkF2Zy4gVGltZVwiLCBbXCJUZW1wbyBNZWRpb1wiXSk7XHJcbiAgICAgICAgc3VwZXIuc2V0KFwiZW4tPml0XCIsIFwiU3BlY2lmaWMgVGltZVwiLCBbXCJUZW1wbyBTcGVjaWZpY29cIl0pO1xyXG4gICAgICAgIHN1cGVyLnNldChcImVuLT5pdFwiLCBcIlBlcmNlbnRhZ2VcIiwgW1wiUGVyY2VudHVhbGVcIl0pO1xyXG4gICAgICAgIHN1cGVyLnNldChcImVuLT5pdFwiLCBcIkNhbGxzIGZvciBQZXJpb2RcIiwgW1wiQ2hpYW1hdGUgUGVyaW9kb1wiXSk7XHJcbiAgICAgICAgc3VwZXIuc2V0KFwiZW4tPml0XCIsIFwiVGltZSBmb3IgUGVyaW9kXCIsIFtcIlRlbXBvIFBlcmlvZG9cIl0pO1xyXG4gICAgICAgIHN1cGVyLnNldChcImVuLT5pdFwiLCBcIlBlYWsgVGltZSBmb3IgUGVyaW9kXCIsIFtcIlRlbXBvIE1heCBQZXJpb2RvXCJdKTtcclxuICAgICAgICBzdXBlci5zZXQoXCJlbi0+aXRcIiwgXCJNaW4uIFRpbWUgZm9yIFBlcmlvZFwiLCBbXCJUZW1wbyBNaW4gUGVyaW9kb1wiXSk7XHJcbiAgICAgICAgc3VwZXIuc2V0KFwiZW4tPml0XCIsIFwiQXZnLiBUaW1lIGZvciBQZXJpb2RcIiwgW1wiVGVtcG8gTWVkaW8gUGVyaW9kb1wiXSk7XHJcbiAgICAgICAgc3VwZXIuc2V0KFwiZW4tPml0XCIsIFwiU3BlY2lmaWMgVGltZSBmb3IgUGVyaW9kXCIsIFtcIlRlbXBvIFNwZWNpZmljbyBQZXJpb2RvXCJdKTtcclxuICAgICAgICBzdXBlci5zZXQoXCJlbi0+aXRcIiwgXCJQZXJjZW50YWdlIGZvciBQZXJpb2RcIiwgW1wiUGVyY2VudHVhbGUgUGVyaW9kb1wiXSk7XHJcbiAgICB9XHJcbn0iXX0=