@esfaenza/admin-module 15.2.53 → 19.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 (109) hide show
  1. package/fesm2022/esfaenza-admin-module.mjs +1756 -0
  2. package/fesm2022/esfaenza-admin-module.mjs.map +1 -0
  3. package/index.d.ts +5 -5
  4. package/lib/admin-module-messages.d.ts +6 -6
  5. package/lib/admin-module.comms.service.d.ts +10 -10
  6. package/lib/admin-module.module.d.ts +112 -114
  7. package/lib/components/_shared/node_detail.component.d.ts +14 -14
  8. package/lib/components/_shared/node_detail.component.loc.d.ts +8 -8
  9. package/lib/components/audits/adm_audits.component.d.ts +34 -34
  10. package/lib/components/audits/adm_audits.component.loc.d.ts +8 -8
  11. package/lib/components/dynamic_views/adm_dynamic_views.component.d.ts +35 -35
  12. package/lib/components/dynamic_views/adm_dynamic_views.component.loc.d.ts +8 -8
  13. package/lib/components/enqueues/adm_enq.component.d.ts +31 -31
  14. package/lib/components/enqueues/adm_enq.component.loc.d.ts +8 -8
  15. package/lib/components/logs/adm_logs.component.d.ts +21 -21
  16. package/lib/components/logs/adm_logs.component.loc.d.ts +8 -8
  17. package/lib/components/metrics/metrics_search.component.d.ts +49 -49
  18. package/lib/components/metrics/metrics_search.component.loc.d.ts +8 -8
  19. package/lib/components/mtd_query/mtd_query.component.d.ts +32 -32
  20. package/lib/components/mtd_query/mtd_query.component.loc.d.ts +8 -8
  21. package/lib/components/profiler/adm_profiler.component.d.ts +35 -35
  22. package/lib/components/profiler/adm_profiler.component.loc.d.ts +8 -8
  23. package/lib/components/topact/topact_search.component.d.ts +78 -78
  24. package/lib/components/topact/topact_search.component.loc.d.ts +8 -8
  25. package/lib/components/workers/adm_wrk.component.d.ts +61 -61
  26. package/lib/components/workers/adm_wrk.component.loc.d.ts +8 -8
  27. package/lib/models/components/ActiveSession.d.ts +11 -11
  28. package/lib/models/components/Audit.d.ts +15 -15
  29. package/lib/models/components/AuditsView.d.ts +17 -17
  30. package/lib/models/components/DirectorInfos.d.ts +8 -8
  31. package/lib/models/components/DynamicViewsView.d.ts +5 -5
  32. package/lib/models/components/LocksView.d.ts +7 -7
  33. package/lib/models/components/Metric.d.ts +6 -6
  34. package/lib/models/components/MetricChart.d.ts +6 -6
  35. package/lib/models/components/MetricsView.d.ts +12 -12
  36. package/lib/models/components/NodeStats.d.ts +23 -23
  37. package/lib/models/components/NodeWaitStack.d.ts +6 -6
  38. package/lib/models/components/ProcessesView.d.ts +17 -17
  39. package/lib/models/components/ProfilerDataNode.d.ts +21 -21
  40. package/lib/models/components/ProfilerDataNode.loc.d.ts +8 -8
  41. package/lib/models/components/ProfilerDataNodesView.d.ts +7 -7
  42. package/lib/models/components/QueryView.d.ts +5 -5
  43. package/lib/models/components/SessionStats.d.ts +15 -15
  44. package/lib/models/components/SessionThread.d.ts +18 -18
  45. package/lib/models/components/TopActivitiesDataView.d.ts +9 -9
  46. package/lib/models/components/TopActivity.d.ts +8 -8
  47. package/lib/models/components/TopNode.d.ts +7 -7
  48. package/lib/models/components/TopSession.d.ts +16 -16
  49. package/lib/models/shared/KeyValue.d.ts +5 -5
  50. package/lib/pipes/format_time.pipe.d.ts +9 -9
  51. package/lib/services/admin-module.base.service.d.ts +44 -44
  52. package/lib/tokens.d.ts +3 -3
  53. package/package.json +8 -15
  54. package/public-api.d.ts +3 -3
  55. package/esm2020/esfaenza-admin-module.mjs +0 -5
  56. package/esm2020/lib/admin-module-messages.mjs +0 -8
  57. package/esm2020/lib/admin-module.comms.service.mjs +0 -29
  58. package/esm2020/lib/admin-module.module.mjs +0 -164
  59. package/esm2020/lib/components/_shared/node_detail.component.loc.mjs +0 -24
  60. package/esm2020/lib/components/_shared/node_detail.component.mjs +0 -45
  61. package/esm2020/lib/components/audits/adm_audits.component.loc.mjs +0 -31
  62. package/esm2020/lib/components/audits/adm_audits.component.mjs +0 -107
  63. package/esm2020/lib/components/dynamic_views/adm_dynamic_views.component.loc.mjs +0 -19
  64. package/esm2020/lib/components/dynamic_views/adm_dynamic_views.component.mjs +0 -116
  65. package/esm2020/lib/components/enqueues/adm_enq.component.loc.mjs +0 -18
  66. package/esm2020/lib/components/enqueues/adm_enq.component.mjs +0 -92
  67. package/esm2020/lib/components/logs/adm_logs.component.loc.mjs +0 -15
  68. package/esm2020/lib/components/logs/adm_logs.component.mjs +0 -42
  69. package/esm2020/lib/components/metrics/metrics_search.component.loc.mjs +0 -22
  70. package/esm2020/lib/components/metrics/metrics_search.component.mjs +0 -168
  71. package/esm2020/lib/components/mtd_query/mtd_query.component.loc.mjs +0 -17
  72. package/esm2020/lib/components/mtd_query/mtd_query.component.mjs +0 -97
  73. package/esm2020/lib/components/profiler/adm_profiler.component.loc.mjs +0 -34
  74. package/esm2020/lib/components/profiler/adm_profiler.component.mjs +0 -108
  75. package/esm2020/lib/components/topact/topact_search.component.loc.mjs +0 -36
  76. package/esm2020/lib/components/topact/topact_search.component.mjs +0 -255
  77. package/esm2020/lib/components/workers/adm_wrk.component.loc.mjs +0 -39
  78. package/esm2020/lib/components/workers/adm_wrk.component.mjs +0 -194
  79. package/esm2020/lib/models/components/ActiveSession.mjs +0 -3
  80. package/esm2020/lib/models/components/Audit.mjs +0 -3
  81. package/esm2020/lib/models/components/AuditsView.mjs +0 -9
  82. package/esm2020/lib/models/components/DirectorInfos.mjs +0 -3
  83. package/esm2020/lib/models/components/DynamicViewsView.mjs +0 -5
  84. package/esm2020/lib/models/components/LocksView.mjs +0 -5
  85. package/esm2020/lib/models/components/Metric.mjs +0 -3
  86. package/esm2020/lib/models/components/MetricChart.mjs +0 -4
  87. package/esm2020/lib/models/components/MetricsView.mjs +0 -5
  88. package/esm2020/lib/models/components/NodeStats.mjs +0 -3
  89. package/esm2020/lib/models/components/NodeWaitStack.mjs +0 -3
  90. package/esm2020/lib/models/components/ProcessesView.mjs +0 -5
  91. package/esm2020/lib/models/components/ProfilerDataNode.loc.mjs +0 -33
  92. package/esm2020/lib/models/components/ProfilerDataNode.mjs +0 -67
  93. package/esm2020/lib/models/components/ProfilerDataNodesView.mjs +0 -5
  94. package/esm2020/lib/models/components/QueryView.mjs +0 -5
  95. package/esm2020/lib/models/components/SessionStats.mjs +0 -3
  96. package/esm2020/lib/models/components/SessionThread.mjs +0 -3
  97. package/esm2020/lib/models/components/TopActivitiesDataView.mjs +0 -5
  98. package/esm2020/lib/models/components/TopActivity.mjs +0 -3
  99. package/esm2020/lib/models/components/TopNode.mjs +0 -3
  100. package/esm2020/lib/models/components/TopSession.mjs +0 -3
  101. package/esm2020/lib/models/shared/KeyValue.mjs +0 -7
  102. package/esm2020/lib/pipes/format_time.pipe.mjs +0 -26
  103. package/esm2020/lib/services/admin-module.base.service.mjs +0 -151
  104. package/esm2020/lib/tokens.mjs +0 -4
  105. package/esm2020/public-api.mjs +0 -7
  106. package/fesm2015/esfaenza-admin-module.mjs +0 -1865
  107. package/fesm2015/esfaenza-admin-module.mjs.map +0 -1
  108. package/fesm2020/esfaenza-admin-module.mjs +0 -1762
  109. package/fesm2020/esfaenza-admin-module.mjs.map +0 -1
@@ -0,0 +1,1756 @@
1
+ import * as i5 from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i7 from '@angular/forms';
4
+ import { FormsModule } from '@angular/forms';
5
+ import * as i0 from '@angular/core';
6
+ import { InjectionToken, Injectable, Inject, Component, ViewChild, EventEmitter, Output, Input, Pipe, NgModule } from '@angular/core';
7
+ import * as i4 from '@angular/router';
8
+ import { RouterModule } from '@angular/router';
9
+ import { MatIconModule } from '@angular/material/icon';
10
+ import { MatDatepickerModule } from '@angular/material/datepicker';
11
+ import { MatInputModule } from '@angular/material/input';
12
+ import * as i8 from 'ngx-bootstrap/modal';
13
+ import { ModalModule } from 'ngx-bootstrap/modal';
14
+ import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
15
+ import { TooltipModule } from 'ngx-bootstrap/tooltip';
16
+ import * as i9 from '@esfaenza/es-table';
17
+ import { AppSearch, EsTableOperationDefinition, EsTableModule } from '@esfaenza/es-table';
18
+ import * as i9$1 from '@esfaenza/forms-and-validations';
19
+ import { FormsAndValidationsModule } from '@esfaenza/forms-and-validations';
20
+ import * as i3$1 from '@esfaenza/es-charts';
21
+ import { LineSerie, LineChartData, PieChartData, KeyValueColor, DateValue, Limit, EsChartsModule } from '@esfaenza/es-charts';
22
+ import { EsGertrudeModule } from '@esfaenza/gertrude';
23
+ import * as i1$1 from '@esfaenza/extensions';
24
+ import { MessageService, InboundMessageTypes, Export, ExportLocalization, ExtensionsModule } from '@esfaenza/extensions';
25
+ import * as i1 from '@esfaenza/localizations';
26
+ import { LocalizationService, LocalizationModule } from '@esfaenza/localizations';
27
+ import { ContextMenuModule } from '@esfaenza/ngx-contextmenu';
28
+ import * as i3 from '@esfaenza/preferences';
29
+ import { HttpParams } from '@angular/common/http';
30
+ import { HTTPService } from '@esfaenza/httpservice';
31
+ import { firstValueFrom, catchError, of, ReplaySubject, interval } from 'rxjs';
32
+ import { GenericItem } from '@esfaenza/core/domain';
33
+ import { __decorate } from 'tslib';
34
+ import { takeUntil } from 'rxjs/operators';
35
+
36
+ class AuditsView extends AppSearch {
37
+ constructor() {
38
+ super();
39
+ this.filteraction = '';
40
+ this.filterhttp = '';
41
+ }
42
+ }
43
+
44
+ const ADM_MODULE_PATH = new InjectionToken('ADM_MODULE_PATH');
45
+ const ADM_CONVERSATIONS = new InjectionToken('ADM_CONVERSATIONS');
46
+
47
+ class AdmAuditLoc extends LocalizationService {
48
+ constructor(injector) {
49
+ super(injector);
50
+ super.set("it->en", "Ricerca Audit Applicativi", ["Search Application Audits"]);
51
+ super.set("it->en", "Utente", ["User"]);
52
+ super.set("it->en", "Chiamata REST", ["REST Call"]);
53
+ super.set("it->en", "Aggiornamento", ["Update"]);
54
+ super.set("it->en", "Route", ["Route"]);
55
+ super.set("it->en", "Azione", ["Action"]);
56
+ super.set("it->en", "Metodo HTTP", ["HTTP Method"]);
57
+ super.set("it->en", "Argomenti", ["Arguments"]);
58
+ super.set("it->en", "ID Oggetto", ["Object ID"]);
59
+ super.set("it->en", "Tipo Oggetto", ["Object Type"]);
60
+ super.set("it->en", "Dati Oggetto", ["Object Data"]);
61
+ super.set("it->en", "Carico gli Audit dell'Applicazione", ["Loading Application Audits"]);
62
+ super.set("it->en", "Data", ["Date"]);
63
+ super.set("it->en", "Indirizzo", ["Address"]);
64
+ super.set("it->en", "Risposta HTTP", ["HTTP Response"]);
65
+ super.set("it->en", "Codice Errore Applicativo", ["Application Error Code"]);
66
+ super.set("it->en", "Cod. Conversation", ["Conversation ID"]);
67
+ }
68
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmAuditLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
69
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmAuditLoc }); }
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmAuditLoc, decorators: [{
72
+ type: Injectable
73
+ }], ctorParameters: () => [{ type: i0.Injector }] });
74
+
75
+ // Angular
76
+ // Chiamate ai Repository
77
+ const GET_Director_ChangeProcessConsumerGroup = "/api/Director/ChangeProcessConsumerGroup";
78
+ const GET_Director_GetConsumerGroups = "/api/Director/GetConsumerGroups#cache";
79
+ const GET_Director_GetInfos = "/api/Director/GetInfos";
80
+ const GET_Director_GetMetrics = "/api/Director/GetMetrics";
81
+ const POST_Director_GetMetrics = "/api/Director/GetMetrics";
82
+ const POST_Director_GetProfilerDataNodes = "/api/Director/GetProfilerDataNodes";
83
+ const GET_Director_GetWorkloadReport = "/api/Director/GetWorkloadReport";
84
+ const POST_Director_GetServerAudits = "/api/Director/GetServerAudits";
85
+ const POST_Director_GetDynamicViewData = "/api/Director/GetDynamicViewData";
86
+ const POST_Director_GetServerLocks = "/api/Director/GetServerLocks";
87
+ const POST_Director_GetServerQuery = "/api/Director/GetServerQuery";
88
+ const GET_Director_GetServerLogs = "/api/Director/GetServerLogs";
89
+ const GET_Director_GetDynamicViews = "/api/Director/GetDynamicViews";
90
+ const POST_Director_GetServerWorkers = "/api/Director/GetServerWorkers";
91
+ const POST_Director_GetTopActivities = "/api/Director/GetTopActivities";
92
+ const GET_Director_KillProcess = "/api/Director/KillProcess";
93
+ const GET_Director_SetProcessTracing = "/api/Director/SetProcessTracing";
94
+ const GET_Director_GetNodeStats = "/api/Director/GetNodeStats";
95
+ const GET_Director_GetSessionStats = "/api/Director/GetSessionStats";
96
+ class AdminModuleBaseService {
97
+ constructor(injector) {
98
+ this.injector = injector;
99
+ this.http = this.injector.get(HTTPService);
100
+ this.msgExts = this.injector.get(MessageService);
101
+ }
102
+ async getServerWorkers(be, sv) {
103
+ var pars = new HttpParams().set("be", be);
104
+ let ret = await firstValueFrom(this.http.post(POST_Director_GetServerWorkers, sv, pars));
105
+ return ret;
106
+ }
107
+ async doSetProcessTracing(be, instanceid, sid, serial, enable) {
108
+ var pars = new HttpParams()
109
+ .set("instanceid", instanceid ?? "")
110
+ .set("sid", sid ?? "")
111
+ .set("serial", serial ?? "")
112
+ .set("enable", enable ?? "")
113
+ .set("be", be ?? "");
114
+ let ret = await firstValueFrom(this.http.get(GET_Director_SetProcessTracing, pars));
115
+ return ret;
116
+ }
117
+ async doKillProcess(be, instanceid, sid, serial) {
118
+ var pars = new HttpParams()
119
+ .set("instanceid", instanceid ?? "")
120
+ .set("sid", sid ?? "")
121
+ .set("serial", serial ?? "")
122
+ .set("be", be ?? "");
123
+ let ret = await firstValueFrom(this.http.get(GET_Director_KillProcess, pars));
124
+ return ret;
125
+ }
126
+ async doChangeProcessConsumerGroup(be, instanceid, sid, serial, consumerGroup) {
127
+ var pars = new HttpParams()
128
+ .set("instanceid", instanceid ?? "")
129
+ .set("sid", sid ?? "")
130
+ .set("serial", serial ?? "")
131
+ .set("consumer_group", consumerGroup ?? "")
132
+ .set("be", be ?? "");
133
+ let ret = await firstValueFrom(this.http.get(GET_Director_ChangeProcessConsumerGroup, pars));
134
+ return ret;
135
+ }
136
+ async getConsumerGroups(be) {
137
+ var pars = new HttpParams().set("be", be ?? "");
138
+ let ret = await firstValueFrom(this.http.get(GET_Director_GetConsumerGroups, pars));
139
+ return ret;
140
+ }
141
+ async getServerLogs(be, from, to) {
142
+ var pars = new HttpParams().set("from", from ?? "").set("to", to ?? "").set("be", be ?? "");
143
+ let ret = await firstValueFrom(this.http.get(GET_Director_GetServerLogs, pars));
144
+ return ret;
145
+ }
146
+ async getTopActivities(be, sv) {
147
+ var pars = new HttpParams().set("be", be ?? "");
148
+ let ret = await firstValueFrom(this.http.post(POST_Director_GetTopActivities, sv, pars));
149
+ return ret;
150
+ }
151
+ async getInfos(be) {
152
+ var pars = new HttpParams().set("be", be ?? "");
153
+ let ret = await firstValueFrom(this.http.get(GET_Director_GetInfos, pars, null, false).pipe(catchError(_ => of(null))));
154
+ return ret;
155
+ }
156
+ async getNodeStats(be, nodeId) {
157
+ let pars = new HttpParams().set("nodeId", nodeId ?? "").set("be", be ?? "");
158
+ let ret = await firstValueFrom(this.http.get(GET_Director_GetNodeStats, pars));
159
+ return ret;
160
+ }
161
+ async getSessionStats(be, sid, serial) {
162
+ let pars = new HttpParams().set('sid', sid ?? "").set('serial', serial ?? "").set("be", be ?? "");
163
+ let ret = await firstValueFrom(this.http.get(GET_Director_GetSessionStats, pars));
164
+ return ret;
165
+ }
166
+ async getProfilerDataNodes(be, sv) {
167
+ var pars = new HttpParams().set("be", be ?? "");
168
+ let ret = await firstValueFrom(this.http.post(POST_Director_GetProfilerDataNodes, sv, pars));
169
+ return ret;
170
+ }
171
+ downloadWorkloadReport(be, from, to) {
172
+ let pars = new HttpParams().set("from", from ?? "").set("to", to ?? "").set("be", be ?? "");
173
+ this.http.getFileNative(GET_Director_GetWorkloadReport, pars);
174
+ }
175
+ async getMetrics(be, sv) {
176
+ var pars = new HttpParams().set("be", be ?? "");
177
+ let ret = await firstValueFrom(this.http.post(POST_Director_GetMetrics, sv, pars));
178
+ return ret;
179
+ }
180
+ async getMetricsList(be, from, to) {
181
+ let pars = new HttpParams()
182
+ .set("from", from ?? "")
183
+ .set("to", to ?? "")
184
+ .set("be", be ?? "");
185
+ let ret = await firstValueFrom(this.http.get(GET_Director_GetMetrics, pars));
186
+ return ret.sort((a, b) => a.name.localeCompare(b.name));
187
+ }
188
+ async getServerLocks(be, sv) {
189
+ var pars = new HttpParams().set("be", be ?? "");
190
+ let ret = await firstValueFrom(this.http.post(POST_Director_GetServerLocks, sv, pars));
191
+ return ret;
192
+ }
193
+ async getServerQuery(be, sv) {
194
+ var pars = new HttpParams().set("be", be ?? "");
195
+ let ret = await firstValueFrom(this.http.post(POST_Director_GetServerQuery, sv, pars));
196
+ return ret;
197
+ }
198
+ async getDynamicViewData(be, sv) {
199
+ var pars = new HttpParams().set("be", be ?? "");
200
+ let ret = await firstValueFrom(this.http.post(POST_Director_GetDynamicViewData, sv, pars));
201
+ return ret;
202
+ }
203
+ async getDynamicViews(be) {
204
+ var pars = new HttpParams().set("be", be ?? "");
205
+ let ret = await firstValueFrom(this.http.get(GET_Director_GetDynamicViews, pars));
206
+ return ret;
207
+ }
208
+ async getServerAudits(be, sv) {
209
+ var pars = new HttpParams().set("be", be ?? "");
210
+ let ret = await firstValueFrom(this.http.post(POST_Director_GetServerAudits, sv, pars));
211
+ return ret;
212
+ }
213
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdminModuleBaseService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
214
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdminModuleBaseService, providedIn: "root" }); }
215
+ }
216
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdminModuleBaseService, decorators: [{
217
+ type: Injectable,
218
+ args: [{ providedIn: "root" }]
219
+ }], ctorParameters: () => [{ type: i0.Injector }] });
220
+
221
+ // Angular
222
+ class AdmAuditsComponent {
223
+ constructor(lc, intercom, localStorage, route, location, adms, mod, usesConversations) {
224
+ this.lc = lc;
225
+ this.intercom = intercom;
226
+ this.localStorage = localStorage;
227
+ this.route = route;
228
+ this.location = location;
229
+ this.adms = adms;
230
+ this.mod = mod;
231
+ this.usesConversations = usesConversations;
232
+ this.searchView = new AuditsView();
233
+ this.Actions = [];
234
+ this.HttpMethods = [];
235
+ this.searchInProgress = false;
236
+ this.be = route.snapshot.params["be"] || "";
237
+ this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data["title"]) });
238
+ this.HttpMethods = [
239
+ { id: "GET", description: "GET" },
240
+ { id: "POST", description: "POST" },
241
+ { id: "PUT", description: "PUT" },
242
+ { id: "PATCH", description: "PATCH" },
243
+ { id: "DELETE", description: "DELETE" }
244
+ ];
245
+ this.Actions = [
246
+ { id: "C", description: this.lc.loc("Chiamata REST") },
247
+ { id: "U", description: this.lc.loc("Aggiornamento") },
248
+ { id: "D", description: this.lc.loc("Elimina") }
249
+ ];
250
+ }
251
+ ngOnInit() {
252
+ this.storageSub = this.route.queryParams.subscribe(params => { this.Init(params["ignoreStorage"]); });
253
+ }
254
+ ngOnDestroy() {
255
+ if (this.storageSub)
256
+ this.storageSub.unsubscribe();
257
+ }
258
+ async Init(ignoreStorage) {
259
+ let item = await this.localStorage.getItem("HotAudittato").toPromise();
260
+ if (!ignoreStorage && item) {
261
+ this.init(item);
262
+ }
263
+ else {
264
+ this.init(null);
265
+ this.location.replaceState(`/pages/${this.mod}/serveraudits`);
266
+ this.route.snapshot.queryParams = [];
267
+ await this.localStorage.removeItem("HotAudittato").toPromise();
268
+ }
269
+ }
270
+ init(HotPotato) {
271
+ //Se ho la HotPotato vuol dire che sono appena tornato dall'edit/nuovo. Rifaccio la ricerca in base ai filtri precedenti
272
+ //Altirmenti genero il modello nuovo normalmente
273
+ if (HotPotato) {
274
+ this.searchView = HotPotato;
275
+ this.POSTGetProcesses(this.searchView);
276
+ }
277
+ else {
278
+ this.searchView = new AuditsView();
279
+ this.searchView.filterda = dayjs().add(-1, "month").format(this.lc.token("getSmallDateFormat"));
280
+ this.searchView.filtera = dayjs().format(this.lc.token("getSmallDateFormat"));
281
+ this.sendSearch();
282
+ }
283
+ }
284
+ sendSearch(resetPage = true) {
285
+ this.searchInProgress = true;
286
+ if (resetPage)
287
+ this.searchView.page = 1;
288
+ this.POSTGetProcesses(this.searchView);
289
+ }
290
+ async POSTGetProcesses(data) {
291
+ this.searchView = await this.adms.getServerAudits(this.be, data);
292
+ this.searchInProgress = false;
293
+ this.localStorage.setItem("HotAudittato", this.searchView).subscribe();
294
+ }
295
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmAuditsComponent, deps: [{ token: i1.LocalizationService }, { token: i1$1.InterComService }, { token: i3.PreferencesService }, { token: i4.ActivatedRoute }, { token: i5.Location }, { token: AdminModuleBaseService }, { token: ADM_MODULE_PATH }, { token: ADM_CONVERSATIONS }], target: i0.ɵɵFactoryTarget.Component }); }
296
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AdmAuditsComponent, isStandalone: false, selector: "adm_audits", ngImport: i0, 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\">{{'Ricerca Audit Applicativi' | localize: lc}}</span>\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\">\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-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterda\" name=\"filterda\" [Placeholder]=\"'Da' | 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.filtera\" name=\"filtera\" [Placeholder]=\"'A' | 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-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filteruser\" name=\"filteruser\" [Placeholder]=\"'Utente' | 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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filteraddress\" name=\"filteraddress\" [Placeholder]=\"'Indirizzo' | 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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterroute\" name=\"filterroute\" [Placeholder]=\"'Route' | 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-select [FormLayout]=\"false\" [Validation]=\"false\" [Placeholder]=\"'Azione' | localize: lc\" [(ngModel)]=\"searchView.filteraction\" name=\"filteraction\" [Source]=\"Actions\"></form-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 row app-no-padding\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-select [FormLayout]=\"false\" [Validation]=\"false\" [Placeholder]=\"'Metodo HTTP' | localize: lc\" [(ngModel)]=\"searchView.filterhttp\" name=\"filterhttp\" [Source]=\"HttpMethods\"></form-select>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterargs\" name=\"filterargs\" [Placeholder]=\"'Argomenti' | 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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterobjid\" name=\"filterobjid\" [Placeholder]=\"'ID Oggetto' | 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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterobjtype\" name=\"filterobjtype\" [Placeholder]=\"'Tipo Oggetto' | 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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterhttpcode\" name=\"filterhttpcode\" [Placeholder]=\"'Risposta HTTP' | localize: lc\"></form-input>\r\n </div>\r\n <!-- Per ora commentato -->\r\n <!-- <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\" *ngIf=\"usesConversations\">\r\n <form-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterconversationid\" name=\"filterconversationid\" [Placeholder]=\"'Cod. Conversation' | localize: lc\"></form-input>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"col-md-1 app-no-padding\">\r\n <button [disabled]=\"searchInProgress\" 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>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Carico gli Audit dell\\'Applicazione' | localize: lc}}...</em></p>\r\n <div *ngIf=\"searchView\">\r\n <es-table [(ngModel)]=\"searchView\" [MultipleOrderingDirectives]=\"true\" (onSearchRequest)=\"sendSearch($event);\">\r\n\r\n <span *th=\"'Timestamp'\">{{'Data' | localize: lc}}</span>\r\n <span *th=\"'User'\">{{'Utente' | localize: lc}}</span>\r\n <span *th=\"'RemoteAddress'\">{{'Indirizzo' | localize: lc}}</span>\r\n <span *th=\"'Action'\">{{'Azione' | localize: lc}}</span>\r\n <span *th=\"'HttpMethod'\">{{'Metodo HTTP' | localize: lc}}</span>\r\n <span *th=\"'Route'\">{{'Route' | localize : lc}}</span>\r\n <span *th=\"'Args'\">{{'Argomenti' | localize: lc}}</span>\r\n <span *th=\"'HttpResponse'\">{{'Risposta HTTP' | localize: lc}}</span>\r\n <span *th=\"'NonStdErrorMessage'\">{{'Codice Errore Applicativo' | localize: lc}}</span>\r\n <span *th=\"'ConvId'; If: usesConversations\">{{'Cod. Conversation' | localize: lc}}</span>\r\n <span *th=\"'ObjectType'\">{{'Tipo Oggetto' | localize: lc}}</span>\r\n <span *th=\"'ObjectId'\">{{'ID Oggetto' | localize: lc}}</span>\r\n <span *th=\"'ObjectData'\">{{'Dati Oggetto' | localize: lc}}</span>\r\n\r\n <strong *td=\"'Timestamp'; let item\">{{item.timestamp | loc_date:'DD/MM/YYYY HH:mm:ss'}}</strong>\r\n <span *td=\"'User'; let item\">{{item.user}}</span>\r\n <span *td=\"'RemoteAddress'; let item\">{{item.address}}</span>\r\n <span *td=\"'Action'; let item\">{{item.action}}</span>\r\n <span *td=\"'HttpMethod'; let item\">{{item.httpmethod}}</span>\r\n <span *td=\"'Route'; let item\">{{item.route}}</span>\r\n <span *td=\"'Args'; let item\">{{item.args}}</span>\r\n <span *td=\"'HttpResponse'; let item\">{{item.httpresponse}}</span>\r\n <span *td=\"'NonStdErrorMessage'; let item\">{{item.mdmerrorcode}}</span>\r\n <span *td=\"'ConvId'; If: usesConversations; let item\">{{item.conversationid}}</span>\r\n <span *td=\"'ObjectType'; let item\">{{item.objecttype}}</span>\r\n <span *td=\"'ObjectId'; let item\">{{item.objectid}}</span>\r\n <span *td=\"'ObjectData'; let item\">{{item.objectdata}}</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>", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.EsTdDirective, selector: "[td]", inputs: ["tdVisible", "td", "tdForProperty", "tdIf", "tdClass", "tdPropertyAccessor", "tdAlignment", "tdFormat", "tdIconClass", "tdConditionField", "tdConditionValue", "tdTitle", "tdContent"] }, { kind: "directive", type: i9.EsThDirective, selector: "[th]", inputs: ["th", "thPinned", "thPinnable", "thPinnedWidth", "thVisible", "thFixed", "thParent", "thOrder", "thOrderable", "thWrap", "thResizable", "thClass", "thShrink", "thGroupClass", "thIf", "thEmpty", "thGroup", "thAggregation", "thProperty", "thType", "thSource", "thMulti", "thStaticContent", "thBackgroundColor", "thAlignment", "thFormat", "thEditorName", "thEditorOptions", "thRendererName", "thRoutePath", "thRouteParameterProperties"] }, { kind: "component", type: i9.EsTableComponent, selector: "es-table", inputs: ["EsThTdProvider", "CornerMenuOptions", "ColumnsResizable", "ColumnsPinnable", "AutoUpdate", "Height", "EmptySpaceBackgroundColor", "EsTableHandledSearch", "MaxHeight", "ContainerClass", "XLSXExport", "CSVExport", "AllSearch", "HighCellDensity", "Selection", "ShowLoadingOnBootstrap", "Removal", "RemovalCondition", "Export", "ShiftClick", "CountLabel", "HidePaging", "HidePagingCount", "HidePagingButtons", "ContextMenu", "ExportFileName", "TableClass", "ExportFunction", "ExportOnlyVisibleColumns", "HasHeaderGroup", "HasSecondaryHeaderGroup", "HeaderHidden", "BodyHidden", "SelectionDisabled", "SingleSelection", "RowClassAssigner", "OrderByColumn", "MultipleOrderingDirectives", "HiddenColumns", "ColumnsOrdering", "SearchView", "SelectAll", "UseArrayModePaging", "DynamicRowColumnsDefinition", "DynamicOperations", "Hierarchy", "ParentKey", "OwnKey", "StartsExpanded", "SavePreferences", "DefaultAlignment", "PagingStyle", "RowGroupingPagingStyle", "ItemSourceProperty", "UseSelectionCache", "ShowItemGroupsColumns", "Editable", "RangeSelection", "SearchThrottle", "ArraymodeItemsPerPage"], outputs: ["onOrderChanged", "onSearchRequest", "onSelectionChanged", "onRemoval", "onAbortRemoval", "onModelChange", "onOpenContextMenu", "onCornerAction", "onDynamicOperation"] }, { kind: "component", type: i9$1.EsFormInputComponent, selector: "form-input", inputs: ["minlength", "maxlength", "pattern", "Password"], outputs: ["onSuffixAction", "onPrefixAction"] }, { kind: "component", type: i9$1.EsFormSelectComponent, selector: "form-select" }, { kind: "component", type: i9$1.EsFormDateComponent, selector: "form-date", inputs: ["InOutFormat", "FloatingLabel"] }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }, { kind: "pipe", type: i1$1.LocDatePipe, name: "loc_date" }], viewProviders: [{ provide: LocalizationService, useClass: AdmAuditLoc }] }); }
297
+ }
298
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmAuditsComponent, decorators: [{
299
+ type: Component,
300
+ args: [{ selector: "adm_audits", viewProviders: [{ provide: LocalizationService, useClass: AdmAuditLoc }], standalone: false, 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\">{{'Ricerca Audit Applicativi' | localize: lc}}</span>\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\">\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-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterda\" name=\"filterda\" [Placeholder]=\"'Da' | 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.filtera\" name=\"filtera\" [Placeholder]=\"'A' | 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-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filteruser\" name=\"filteruser\" [Placeholder]=\"'Utente' | 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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filteraddress\" name=\"filteraddress\" [Placeholder]=\"'Indirizzo' | 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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterroute\" name=\"filterroute\" [Placeholder]=\"'Route' | 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-select [FormLayout]=\"false\" [Validation]=\"false\" [Placeholder]=\"'Azione' | localize: lc\" [(ngModel)]=\"searchView.filteraction\" name=\"filteraction\" [Source]=\"Actions\"></form-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 row app-no-padding\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-select [FormLayout]=\"false\" [Validation]=\"false\" [Placeholder]=\"'Metodo HTTP' | localize: lc\" [(ngModel)]=\"searchView.filterhttp\" name=\"filterhttp\" [Source]=\"HttpMethods\"></form-select>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterargs\" name=\"filterargs\" [Placeholder]=\"'Argomenti' | 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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterobjid\" name=\"filterobjid\" [Placeholder]=\"'ID Oggetto' | 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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterobjtype\" name=\"filterobjtype\" [Placeholder]=\"'Tipo Oggetto' | 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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterhttpcode\" name=\"filterhttpcode\" [Placeholder]=\"'Risposta HTTP' | localize: lc\"></form-input>\r\n </div>\r\n <!-- Per ora commentato -->\r\n <!-- <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\" *ngIf=\"usesConversations\">\r\n <form-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterconversationid\" name=\"filterconversationid\" [Placeholder]=\"'Cod. Conversation' | localize: lc\"></form-input>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"col-md-1 app-no-padding\">\r\n <button [disabled]=\"searchInProgress\" 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>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Carico gli Audit dell\\'Applicazione' | localize: lc}}...</em></p>\r\n <div *ngIf=\"searchView\">\r\n <es-table [(ngModel)]=\"searchView\" [MultipleOrderingDirectives]=\"true\" (onSearchRequest)=\"sendSearch($event);\">\r\n\r\n <span *th=\"'Timestamp'\">{{'Data' | localize: lc}}</span>\r\n <span *th=\"'User'\">{{'Utente' | localize: lc}}</span>\r\n <span *th=\"'RemoteAddress'\">{{'Indirizzo' | localize: lc}}</span>\r\n <span *th=\"'Action'\">{{'Azione' | localize: lc}}</span>\r\n <span *th=\"'HttpMethod'\">{{'Metodo HTTP' | localize: lc}}</span>\r\n <span *th=\"'Route'\">{{'Route' | localize : lc}}</span>\r\n <span *th=\"'Args'\">{{'Argomenti' | localize: lc}}</span>\r\n <span *th=\"'HttpResponse'\">{{'Risposta HTTP' | localize: lc}}</span>\r\n <span *th=\"'NonStdErrorMessage'\">{{'Codice Errore Applicativo' | localize: lc}}</span>\r\n <span *th=\"'ConvId'; If: usesConversations\">{{'Cod. Conversation' | localize: lc}}</span>\r\n <span *th=\"'ObjectType'\">{{'Tipo Oggetto' | localize: lc}}</span>\r\n <span *th=\"'ObjectId'\">{{'ID Oggetto' | localize: lc}}</span>\r\n <span *th=\"'ObjectData'\">{{'Dati Oggetto' | localize: lc}}</span>\r\n\r\n <strong *td=\"'Timestamp'; let item\">{{item.timestamp | loc_date:'DD/MM/YYYY HH:mm:ss'}}</strong>\r\n <span *td=\"'User'; let item\">{{item.user}}</span>\r\n <span *td=\"'RemoteAddress'; let item\">{{item.address}}</span>\r\n <span *td=\"'Action'; let item\">{{item.action}}</span>\r\n <span *td=\"'HttpMethod'; let item\">{{item.httpmethod}}</span>\r\n <span *td=\"'Route'; let item\">{{item.route}}</span>\r\n <span *td=\"'Args'; let item\">{{item.args}}</span>\r\n <span *td=\"'HttpResponse'; let item\">{{item.httpresponse}}</span>\r\n <span *td=\"'NonStdErrorMessage'; let item\">{{item.mdmerrorcode}}</span>\r\n <span *td=\"'ConvId'; If: usesConversations; let item\">{{item.conversationid}}</span>\r\n <span *td=\"'ObjectType'; let item\">{{item.objecttype}}</span>\r\n <span *td=\"'ObjectId'; let item\">{{item.objectid}}</span>\r\n <span *td=\"'ObjectData'; let item\">{{item.objectdata}}</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>" }]
301
+ }], ctorParameters: () => [{ type: i1.LocalizationService }, { type: i1$1.InterComService }, { type: i3.PreferencesService }, { type: i4.ActivatedRoute }, { type: i5.Location }, { type: AdminModuleBaseService }, { type: undefined, decorators: [{
302
+ type: Inject,
303
+ args: [ADM_MODULE_PATH]
304
+ }] }, { type: undefined, decorators: [{
305
+ type: Inject,
306
+ args: [ADM_CONVERSATIONS]
307
+ }] }] });
308
+
309
+ class KeyValue {
310
+ constructor(id, description) {
311
+ this.id = id;
312
+ this.description = description;
313
+ }
314
+ }
315
+
316
+ class ProcessesView extends AppSearch {
317
+ constructor() { super(); }
318
+ }
319
+
320
+ class AdmWrkLoc extends LocalizationService {
321
+ constructor(injector) {
322
+ super(injector);
323
+ super.set("it->en", "Gruppo di Consumo modificato con successo", ["Consumer Group succesfully changed"]);
324
+ super.set("it->en", "Errori nella modifica del Gruppo di Consumo", ["Errors changing Consumer Group"]);
325
+ super.set("it->en", "Modifica Gruppo di Consumo", ["Change Consumer Group"]);
326
+ super.set("it->en", "Nuovo Gruppo di Consumo", ["New Consumer Group"]);
327
+ super.set("it->en", "Tipo Thread", ["Thread Type"]);
328
+ super.set("it->en", "Stato Thread", ["Thread Status"]);
329
+ super.set("it->en", "Tipo", ["Type"]);
330
+ super.set("it->en", "Stato", ["State"]);
331
+ super.set("it->en", "SID", ["SID"]);
332
+ super.set("it->en", "TID", ["TID"]);
333
+ super.set("it->en", "In Attesa", ["In Wait"]);
334
+ super.set("it->en", "Push dedicato connesso", ["Dedicated push connected"]);
335
+ super.set("it->en", "Ricerca globale", ["Global search"]);
336
+ super.set("it->en", "Ricerca Processi Applicativi", ["Search Application Processes"]);
337
+ super.set("it->en", "Tenant", ["Tenant"]);
338
+ super.set("it->en", "Errori nella modifica del Tracing del Processo", ["Errors toggling Process Tracing"]);
339
+ super.set("it->en", "Utente", ["User"]);
340
+ super.set("it->en", "Carico i Processi Applicativi", ["Loading Application Processes"]);
341
+ super.set("it->en", "Attiva Tracing Processo", ["Activate Process Tracing"]);
342
+ super.set("it->en", "Disattiva Tracing Progetto", ["Deactivate Process Tracing"]);
343
+ super.set("it->en", "Ammazza Processo", ["Kill Process"]);
344
+ super.set("it->en", "Errori durante la Kill del Processo", ["Errors killing the Process"]);
345
+ super.set("it->en", "Processo ucciso con successo", ["Process succesfully killed"]);
346
+ super.set("it->en", "Conferma Terminazione del Processo", ["Confirm Process Kill"]);
347
+ super.set("it->en", "Sei sicuro di voler Terminare il processo selezionato? L'utente relativo sara' disconnesso", ["Are you sure you wish to kill the selected process? The associated user will be disconnected"]);
348
+ }
349
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmWrkLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
350
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmWrkLoc }); }
351
+ }
352
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmWrkLoc, decorators: [{
353
+ type: Injectable
354
+ }], ctorParameters: () => [{ type: i0.Injector }] });
355
+
356
+ // Angular
357
+ class AdmWrkComponent {
358
+ constructor(utiExts, msgExts, lc, localStorage, intercom, route, location, adms, mod) {
359
+ this.utiExts = utiExts;
360
+ this.msgExts = msgExts;
361
+ this.lc = lc;
362
+ this.localStorage = localStorage;
363
+ this.intercom = intercom;
364
+ this.route = route;
365
+ this.location = location;
366
+ this.adms = adms;
367
+ this.mod = mod;
368
+ this.globalFilterValue = null;
369
+ this.searchView = new ProcessesView();
370
+ this.DynamicOps = [];
371
+ this.valueToShow = "";
372
+ this.Types = [];
373
+ this.States = [];
374
+ this.ThreadTypes = [];
375
+ this.ThreadStatuses = [];
376
+ //********************************************** Gestione modifica Consumer Group ***************************************
377
+ this.newCg = "";
378
+ this.CGs = [];
379
+ this.CgDictionariesLoaded = false;
380
+ this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data["title"]) });
381
+ this.be = route.snapshot.params["be"] || "";
382
+ this.DynamicOps = [
383
+ new EsTableOperationDefinition("trace_on", this.lc.loc("Attiva Tracing Processo"), "fa fa-circle text-danger", "", "trace_enabled", "N"),
384
+ new EsTableOperationDefinition("trace_off", this.lc.loc("Disattiva Tracing Progetto"), "fa fa-circle text-success", "", "trace_enabled", "Y"),
385
+ new EsTableOperationDefinition("kill", this.lc.loc("Ammazza Processo"), "fa fa-ban text-danger"),
386
+ new EsTableOperationDefinition("change_cg", this.lc.loc("Modifica Gruppo di Consumo"), "fa fa-edit text-info")
387
+ ];
388
+ }
389
+ ngOnInit() {
390
+ this.storageSub = this.route.queryParams.subscribe(params => {
391
+ this.Init(params["ignoreStorage"]);
392
+ });
393
+ }
394
+ ngOnDestroy() {
395
+ if (this.storageSub)
396
+ this.storageSub.unsubscribe();
397
+ }
398
+ Init(ignoreStorage) {
399
+ this.Types = [new KeyValue("USER", "USER"), new KeyValue("BACKGROUND", "BACKGROUND"), new KeyValue("JOB", "JOB")];
400
+ this.States = [new KeyValue("ACTIVE", "ACTIVE"), new KeyValue("INACTIVE", "INACTIVE"), new KeyValue("KILLED", "KILLED")];
401
+ this.ThreadTypes = ["APITHREAD", "APIPUSHTHREAD", "BACKGROUNDTHREAD", "JOBTHREAD", "PARALLELSLAVETHREAD"].map(t => new KeyValue(t, t));
402
+ this.ThreadStatuses = ["ACTIVE", "IDLE", "THROTTLING", "KILLED"].map(t => new KeyValue(t, t));
403
+ this.doInit(ignoreStorage);
404
+ }
405
+ async doInit(ignoreStorage) {
406
+ let item = await this.localStorage.getItem("HotProcessato").toPromise();
407
+ if (!ignoreStorage && item) {
408
+ this.init(item);
409
+ }
410
+ else {
411
+ this.init(null);
412
+ this.location.replaceState(`/pages/${this.mod}/serverworkers`);
413
+ this.route.snapshot.queryParams = [];
414
+ await this.localStorage.removeItem("HotProcessato").toPromise();
415
+ }
416
+ }
417
+ init(HotPotato) {
418
+ if (HotPotato) {
419
+ this.searchView = HotPotato;
420
+ this.POSTGetServerWorkers();
421
+ }
422
+ else {
423
+ this.searchView = new ProcessesView();
424
+ this.sendSearch();
425
+ }
426
+ }
427
+ sendSearch(resetPage = true) {
428
+ this.searchView.searchinprogress = true;
429
+ if (resetPage)
430
+ this.searchView.page = 1;
431
+ this.POSTGetServerWorkers();
432
+ }
433
+ async POSTGetServerWorkers() {
434
+ // Switch cattivo per resettare la tabella quando cambia il global (dato che potrebbero cambiare le colonne)
435
+ // La casistica è esplicitamente non supportata dall'estable quindi abbozzo un hard refresh da qui...
436
+ if (this.globalFilterValue != null && this.globalFilterValue != this.searchView.filterglobal) {
437
+ let prevSearchView = this.utiExts.deepClone(this.searchView);
438
+ this.searchView = null;
439
+ requestAnimationFrame(async () => {
440
+ this.globalFilterValue = prevSearchView.filterglobal;
441
+ this.searchView = await this.adms.getServerWorkers(this.be, prevSearchView);
442
+ this.searchView.searchinprogress = false;
443
+ this.localStorage.setItem("HotProcessato", this.searchView).subscribe();
444
+ });
445
+ }
446
+ else {
447
+ this.globalFilterValue = this.searchView.filterglobal || false;
448
+ this.searchView = await this.adms.getServerWorkers(this.be, this.searchView);
449
+ this.searchView.searchinprogress = false;
450
+ this.localStorage.setItem("HotProcessato", this.searchView).subscribe();
451
+ }
452
+ }
453
+ async prepareExport(callback) {
454
+ var view = JSON.parse(JSON.stringify(this.searchView));
455
+ view.page = 1;
456
+ view.itemsperpageoverride = 9999999;
457
+ let tmp = await this.adms.getServerWorkers(this.be, view);
458
+ callback(tmp.items, GenericItem);
459
+ }
460
+ back() {
461
+ this.location.back();
462
+ }
463
+ onOperation(event) {
464
+ switch (event.id) {
465
+ case "trace_on":
466
+ this.toggleTracing(event.item, true);
467
+ break;
468
+ case "trace_off":
469
+ this.toggleTracing(event.item, false);
470
+ break;
471
+ case "kill":
472
+ this.killProcess(event.item);
473
+ break;
474
+ case "change_cg":
475
+ this.changeProcessCg(event.item);
476
+ break;
477
+ }
478
+ }
479
+ async toggleTracing(process, tracing) {
480
+ let res = await this.adms.doSetProcessTracing(this.be, process.properties["inst_id"] || process.properties["INST_ID"], process.properties["sid"] || process.properties["SID"], process.properties["serial"] || process.properties["SERIAL"], tracing.toString());
481
+ this.msgExts.manageStringResponse(res, "", this.lc.loc("Errori nella modifica del Tracing del Processo"), () => this.sendSearch());
482
+ }
483
+ killProcess(process) {
484
+ this.msgExts.simpleWarningWithChoice(this.lc.loc("Conferma Terminazione del Processo"), this.lc.loc("Sei sicuro di voler Terminare il processo selezionato? L'utente relativo sara' disconnesso"), async () => {
485
+ let res = await this.adms.doKillProcess(this.be, process.properties["inst_id"] || process.properties["INST_ID"], process.properties["sid"] || process.properties["SID"], process.properties["serial"] || process.properties["SERIAL"]);
486
+ this.msgExts.manageStringResponse(res, this.lc.loc("Processo ucciso con successo"), this.lc.loc("Errori durante la Kill del Processo"), () => this.sendSearch());
487
+ });
488
+ }
489
+ changeProcessCg(process) {
490
+ this.ProcessOnEdit = process;
491
+ if (!this.CgDictionariesLoaded) {
492
+ this.loadCgDictionaries();
493
+ this.CgDictionariesLoaded = true;
494
+ }
495
+ this.setupChangeCg();
496
+ this.dlgChangeCg.show();
497
+ }
498
+ async loadCgDictionaries() {
499
+ this.CGs = await this.adms.getConsumerGroups(this.be);
500
+ }
501
+ setupChangeCg() {
502
+ this.utiExts.cleanForm(this.cgFrom);
503
+ setTimeout(() => { this.newCg = ""; });
504
+ }
505
+ async doChangeCg() {
506
+ let res = await this.adms.doChangeProcessConsumerGroup(this.be, this.ProcessOnEdit.properties["inst_id"] || this.ProcessOnEdit.properties["INST_ID"], this.ProcessOnEdit.properties["sid"] || this.ProcessOnEdit.properties["SID"], this.ProcessOnEdit.properties["serial"] || this.ProcessOnEdit.properties["SERIAL"], this.newCg);
507
+ this.msgExts.manageStringResponse(res, this.lc.loc("Gruppo di Consumo modificato con successo"), this.lc.loc("Errori nella modifica del Gruppo di Consumo"), () => this.sendSearch());
508
+ return true;
509
+ }
510
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmWrkComponent, deps: [{ token: i1$1.UtilityService }, { token: i1$1.MessageService }, { token: i1.LocalizationService }, { token: i3.PreferencesService }, { token: i1$1.InterComService }, { token: i4.ActivatedRoute }, { token: i5.Location }, { token: AdminModuleBaseService }, { token: ADM_MODULE_PATH }], target: i0.ɵɵFactoryTarget.Component }); }
511
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AdmWrkComponent, isStandalone: false, selector: "adm_wrk", viewQueries: [{ propertyName: "cgFrom", first: true, predicate: ["cgFrom"], descendants: true }, { propertyName: "dlgChangeCg", first: true, predicate: ["dlgChangeCg"], descendants: true }], ngImport: i0, 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\">{{'Ricerca Processi Applicativi' | localize: lc}}</span>\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <div *ngIf=\"searchView\" class=\"col-md-12 bottom-15\">\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-1 col-md-12 app-filter-wrapper\" style=\"display: flex; height: 38px;\">\r\n <form-checkbox [FormLayout]=\"false\" [SliderMode]=\"true\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterglobal\" name=\"filterglobal\"></form-checkbox>&nbsp;\r\n <span class=\"app-pointer app-padding-top-5 app-padding-left-5\" (click)=\"searchView.filterglobal = !searchView.filterglobal\">{{'Ricerca globale' | localize: lc}}</span>\r\n </div> \r\n <div class=\"col-xl-2 col-lg-1 col-md-12 app-filter-wrapper\">\r\n <form-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtersid\" name=\"filtersid\" [Placeholder]=\"'SID'| 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-select [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtertype\" name=\"filtertype\" [Placeholder]=\"'Tipo' | localize: lc\" [Source]=\"Types\"></form-select>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-1 col-md-12 app-filter-wrapper\">\r\n <form-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtertenant\" name=\"filterTenant\" [Placeholder]=\"'Tenant' | 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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filteruser\" name=\"filterUser\" [Placeholder]=\"'Utente' | 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-select [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterstate\" name=\"filterState\" [Placeholder]=\"'Stato' | localize: lc\" [Source]=\"States\"></form-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 row app-no-padding\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtertid\" name=\"filtertid\" [Placeholder]=\"'TID'| 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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtermtid\" name=\"filtermtid\" [Placeholder]=\"'Thread gestito'| 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-select [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterthreadtype\" name=\"filterthreadtype\" [Placeholder]=\"'Tipo Thread' | localize: lc\" [Source]=\"ThreadTypes\"></form-select>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-select [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterthreadstatus\" name=\"filterthreadstatus\" [Placeholder]=\"'Stato Thread' | localize: lc\" [Source]=\"ThreadStatuses\"></form-select>\r\n </div> \r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\" style=\"display: flex; height: 38px;\">\r\n <form-checkbox [FormLayout]=\"false\" [SliderMode]=\"true\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterinwait\" name=\"filterinwait\"></form-checkbox>&nbsp;\r\n <span class=\"app-pointer app-padding-top-5 app-padding-left-5\" (click)=\"searchView.filterinwait = !searchView.filterinwait\">{{'In Attesa' | localize: lc}}</span>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\" style=\"display: flex; height: 38px;\">\r\n <form-checkbox [FormLayout]=\"false\" [SliderMode]=\"true\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterdcid\" name=\"filterdcid\"></form-checkbox>&nbsp;\r\n <span class=\"app-pointer app-padding-top-5 app-padding-left-5\" (click)=\"searchView.filterdcid = !searchView.filterdcid\">{{'Push dedicato connesso' | localize: lc}}</span>\r\n </div> \r\n </div>\r\n </div>\r\n <div class=\"col-md-1 app-no-padding\">\r\n <button [disabled]=\"searchView.searchinprogress\" 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>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Carico i Processi Applicativi' | localize: lc}}...</em></p>\r\n <div *ngIf=\"searchView\">\r\n <es-table [(ngModel)]=\"searchView\" [DynamicOperations]=\"DynamicOps\" [Export]=\"true\"\r\n [ExportFileName]=\"'Application Processes.csv'\" [ExportFunction]=\"prepareExport.bind(this)\" [AutoUpdate]=\"true\"\r\n [OrderByColumn]=\"true\" (onSearchRequest)=\"sendSearch($event);\" (onDynamicOperation)=\"onOperation($event)\">\r\n \r\n <span class=\"app-nowrap\" *td=\"'full_wait_stack'; let value\">\r\n <span class=\"fa fa-list app-pointer\" (click)=\"valueToShow = value; dlgValue.show();\"></span>&nbsp;\r\n {{value.length > 70 ? value.substr(0, 67) + '...' : value}}\r\n </span>\r\n </es-table>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"app-margin-top-15\">\r\n <button class=\"btn btn-secondary pull-left\" type=\"button\" (click)=\"back()\">{{'Indietro' | localize: lc}}</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div bsModal #dlgChangeCg=\"bs-modal\" class=\"modal fade\" role=\"dialog\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\" emaDraggable>\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title pull-left\">{{'Modifica Gruppo di Consumo' | localize: lc}}</h4>\r\n <button type=\"button\" class=\"close pull-right\" (click)=\"dlgChangeCg.hide()\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <form novalidate #cgFrom=\"ngForm\" (ngSubmit)=\"cgFrom.valid && doChangeCg() && dlgChangeCg.hide()\">\r\n <div class=\"modal-body\">\r\n <form-select [Label]=\"'Nuovo Gruppo di Consumo' | localize: lc\" [(ngModel)]=\"newCg\" name=\"newCg\" [Source]=\"CGs\" required [Last]=\"true\"></form-select>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary app-margin-right-5\" (click)=\"dlgChangeCg.hide()\">{{'Chiudi' | localize: lc}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary\">{{'Conferma' | localize: lc}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div bsModal #dlgValue=\"bs-modal\" class=\"modal fade\" role=\"dialog\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-xl\" app-draggable=\".modal-header\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title pull-left\">\r\n Full Wait Stack\r\n </h5>\r\n <button type=\"button\" class=\"close pull-right\" (click)=\"dlgValue.hide()\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body app-padidng-bottom-20 app-padding-top-20\">\r\n <span class=\"app-wrap\">\r\n {{valueToShow}}\r\n </span>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"dlgValue.hide()\">Chiudi</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.ModalDirective, selector: "[bsModal]", inputs: ["config", "closeInterceptor"], outputs: ["onShow", "onShown", "onHide", "onHidden"], exportAs: ["bs-modal"] }, { kind: "directive", type: i9.EsTdDirective, selector: "[td]", inputs: ["tdVisible", "td", "tdForProperty", "tdIf", "tdClass", "tdPropertyAccessor", "tdAlignment", "tdFormat", "tdIconClass", "tdConditionField", "tdConditionValue", "tdTitle", "tdContent"] }, { kind: "component", type: i9.EsTableComponent, selector: "es-table", inputs: ["EsThTdProvider", "CornerMenuOptions", "ColumnsResizable", "ColumnsPinnable", "AutoUpdate", "Height", "EmptySpaceBackgroundColor", "EsTableHandledSearch", "MaxHeight", "ContainerClass", "XLSXExport", "CSVExport", "AllSearch", "HighCellDensity", "Selection", "ShowLoadingOnBootstrap", "Removal", "RemovalCondition", "Export", "ShiftClick", "CountLabel", "HidePaging", "HidePagingCount", "HidePagingButtons", "ContextMenu", "ExportFileName", "TableClass", "ExportFunction", "ExportOnlyVisibleColumns", "HasHeaderGroup", "HasSecondaryHeaderGroup", "HeaderHidden", "BodyHidden", "SelectionDisabled", "SingleSelection", "RowClassAssigner", "OrderByColumn", "MultipleOrderingDirectives", "HiddenColumns", "ColumnsOrdering", "SearchView", "SelectAll", "UseArrayModePaging", "DynamicRowColumnsDefinition", "DynamicOperations", "Hierarchy", "ParentKey", "OwnKey", "StartsExpanded", "SavePreferences", "DefaultAlignment", "PagingStyle", "RowGroupingPagingStyle", "ItemSourceProperty", "UseSelectionCache", "ShowItemGroupsColumns", "Editable", "RangeSelection", "SearchThrottle", "ArraymodeItemsPerPage"], outputs: ["onOrderChanged", "onSearchRequest", "onSelectionChanged", "onRemoval", "onAbortRemoval", "onModelChange", "onOpenContextMenu", "onCornerAction", "onDynamicOperation"] }, { kind: "component", type: i9$1.EsFormInputComponent, selector: "form-input", inputs: ["minlength", "maxlength", "pattern", "Password"], outputs: ["onSuffixAction", "onPrefixAction"] }, { kind: "component", type: i9$1.EsFormSelectComponent, selector: "form-select" }, { kind: "component", type: i9$1.EsFormCheckboxComponent, selector: "form-checkbox", inputs: ["SliderMode"] }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }], viewProviders: [{ provide: LocalizationService, useClass: AdmWrkLoc }] }); }
512
+ }
513
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmWrkComponent, decorators: [{
514
+ type: Component,
515
+ args: [{ selector: "adm_wrk", viewProviders: [{ provide: LocalizationService, useClass: AdmWrkLoc }], standalone: false, 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\">{{'Ricerca Processi Applicativi' | localize: lc}}</span>\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <div *ngIf=\"searchView\" class=\"col-md-12 bottom-15\">\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-1 col-md-12 app-filter-wrapper\" style=\"display: flex; height: 38px;\">\r\n <form-checkbox [FormLayout]=\"false\" [SliderMode]=\"true\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterglobal\" name=\"filterglobal\"></form-checkbox>&nbsp;\r\n <span class=\"app-pointer app-padding-top-5 app-padding-left-5\" (click)=\"searchView.filterglobal = !searchView.filterglobal\">{{'Ricerca globale' | localize: lc}}</span>\r\n </div> \r\n <div class=\"col-xl-2 col-lg-1 col-md-12 app-filter-wrapper\">\r\n <form-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtersid\" name=\"filtersid\" [Placeholder]=\"'SID'| 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-select [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtertype\" name=\"filtertype\" [Placeholder]=\"'Tipo' | localize: lc\" [Source]=\"Types\"></form-select>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-1 col-md-12 app-filter-wrapper\">\r\n <form-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtertenant\" name=\"filterTenant\" [Placeholder]=\"'Tenant' | 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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filteruser\" name=\"filterUser\" [Placeholder]=\"'Utente' | 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-select [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterstate\" name=\"filterState\" [Placeholder]=\"'Stato' | localize: lc\" [Source]=\"States\"></form-select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 row app-no-padding\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtertid\" name=\"filtertid\" [Placeholder]=\"'TID'| 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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtermtid\" name=\"filtermtid\" [Placeholder]=\"'Thread gestito'| 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-select [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterthreadtype\" name=\"filterthreadtype\" [Placeholder]=\"'Tipo Thread' | localize: lc\" [Source]=\"ThreadTypes\"></form-select>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-select [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterthreadstatus\" name=\"filterthreadstatus\" [Placeholder]=\"'Stato Thread' | localize: lc\" [Source]=\"ThreadStatuses\"></form-select>\r\n </div> \r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\" style=\"display: flex; height: 38px;\">\r\n <form-checkbox [FormLayout]=\"false\" [SliderMode]=\"true\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterinwait\" name=\"filterinwait\"></form-checkbox>&nbsp;\r\n <span class=\"app-pointer app-padding-top-5 app-padding-left-5\" (click)=\"searchView.filterinwait = !searchView.filterinwait\">{{'In Attesa' | localize: lc}}</span>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\" style=\"display: flex; height: 38px;\">\r\n <form-checkbox [FormLayout]=\"false\" [SliderMode]=\"true\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterdcid\" name=\"filterdcid\"></form-checkbox>&nbsp;\r\n <span class=\"app-pointer app-padding-top-5 app-padding-left-5\" (click)=\"searchView.filterdcid = !searchView.filterdcid\">{{'Push dedicato connesso' | localize: lc}}</span>\r\n </div> \r\n </div>\r\n </div>\r\n <div class=\"col-md-1 app-no-padding\">\r\n <button [disabled]=\"searchView.searchinprogress\" 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>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Carico i Processi Applicativi' | localize: lc}}...</em></p>\r\n <div *ngIf=\"searchView\">\r\n <es-table [(ngModel)]=\"searchView\" [DynamicOperations]=\"DynamicOps\" [Export]=\"true\"\r\n [ExportFileName]=\"'Application Processes.csv'\" [ExportFunction]=\"prepareExport.bind(this)\" [AutoUpdate]=\"true\"\r\n [OrderByColumn]=\"true\" (onSearchRequest)=\"sendSearch($event);\" (onDynamicOperation)=\"onOperation($event)\">\r\n \r\n <span class=\"app-nowrap\" *td=\"'full_wait_stack'; let value\">\r\n <span class=\"fa fa-list app-pointer\" (click)=\"valueToShow = value; dlgValue.show();\"></span>&nbsp;\r\n {{value.length > 70 ? value.substr(0, 67) + '...' : value}}\r\n </span>\r\n </es-table>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"app-margin-top-15\">\r\n <button class=\"btn btn-secondary pull-left\" type=\"button\" (click)=\"back()\">{{'Indietro' | localize: lc}}</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div bsModal #dlgChangeCg=\"bs-modal\" class=\"modal fade\" role=\"dialog\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\" emaDraggable>\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title pull-left\">{{'Modifica Gruppo di Consumo' | localize: lc}}</h4>\r\n <button type=\"button\" class=\"close pull-right\" (click)=\"dlgChangeCg.hide()\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <form novalidate #cgFrom=\"ngForm\" (ngSubmit)=\"cgFrom.valid && doChangeCg() && dlgChangeCg.hide()\">\r\n <div class=\"modal-body\">\r\n <form-select [Label]=\"'Nuovo Gruppo di Consumo' | localize: lc\" [(ngModel)]=\"newCg\" name=\"newCg\" [Source]=\"CGs\" required [Last]=\"true\"></form-select>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary app-margin-right-5\" (click)=\"dlgChangeCg.hide()\">{{'Chiudi' | localize: lc}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary\">{{'Conferma' | localize: lc}}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div bsModal #dlgValue=\"bs-modal\" class=\"modal fade\" role=\"dialog\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-xl\" app-draggable=\".modal-header\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title pull-left\">\r\n Full Wait Stack\r\n </h5>\r\n <button type=\"button\" class=\"close pull-right\" (click)=\"dlgValue.hide()\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body app-padidng-bottom-20 app-padding-top-20\">\r\n <span class=\"app-wrap\">\r\n {{valueToShow}}\r\n </span>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"dlgValue.hide()\">Chiudi</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
516
+ }], ctorParameters: () => [{ type: i1$1.UtilityService }, { type: i1$1.MessageService }, { type: i1.LocalizationService }, { type: i3.PreferencesService }, { type: i1$1.InterComService }, { type: i4.ActivatedRoute }, { type: i5.Location }, { type: AdminModuleBaseService }, { type: undefined, decorators: [{
517
+ type: Inject,
518
+ args: [ADM_MODULE_PATH]
519
+ }] }], propDecorators: { cgFrom: [{
520
+ type: ViewChild,
521
+ args: ["cgFrom"]
522
+ }], dlgChangeCg: [{
523
+ type: ViewChild,
524
+ args: ["dlgChangeCg"]
525
+ }] } });
526
+
527
+ class ProfilerDataNodeLoc extends LocalizationService {
528
+ constructor(injector) {
529
+ super(injector);
530
+ super.set("it->en", "ID Padre", ["Parent ID"]);
531
+ super.set("it->en", "ID", ["ID"]);
532
+ super.set("it->en", "Descrizione", ["Description"]);
533
+ super.set("it->en", "Chiamate", ["Calls"]);
534
+ super.set("it->en", "Tempo", ["Time"]);
535
+ super.set("it->en", "Tempo Max", ["Peak Time"]);
536
+ super.set("it->en", "Tempo Min", ["Min. Time"]);
537
+ super.set("it->en", "Tempo Medio", ["Avg. Time"]);
538
+ super.set("it->en", "Tempo Specifico", ["Specific Time"]);
539
+ super.set("it->en", "Percentuale", ["Percentage"]);
540
+ super.set("it->en", "Chiamate Periodo", ["Calls for Period"]);
541
+ super.set("it->en", "Tempo Periodo", ["Time for Period"]);
542
+ super.set("it->en", "Tempo Max Periodo", ["Peak Time for Period"]);
543
+ super.set("it->en", "Tempo Min Periodo", ["Min. Time for Period"]);
544
+ super.set("it->en", "Tempo Medio Periodo", ["Avg. Time for Period"]);
545
+ super.set("it->en", "Tempo Specifico Periodo", ["Specific Time for Period"]);
546
+ super.set("it->en", "Percentuale Periodo", ["Percentage for Period"]);
547
+ super.set("it->en", "Nome Tipologia Evento", ["Event Type Name"]);
548
+ super.set("it->en", "Nome Classe Attesa", ["Wait Class Name"]);
549
+ }
550
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ProfilerDataNodeLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
551
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ProfilerDataNodeLoc }); }
552
+ }
553
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ProfilerDataNodeLoc, decorators: [{
554
+ type: Injectable
555
+ }], ctorParameters: () => [{ type: i0.Injector }] });
556
+
557
+ let ProfilerDataNode = class ProfilerDataNode {
558
+ };
559
+ __decorate([
560
+ Export(10, "ID Padre")
561
+ ], ProfilerDataNode.prototype, "parentid", void 0);
562
+ __decorate([
563
+ Export(20, "ID")
564
+ ], ProfilerDataNode.prototype, "id", void 0);
565
+ __decorate([
566
+ Export(30, "Descrizione")
567
+ ], ProfilerDataNode.prototype, "description", void 0);
568
+ __decorate([
569
+ Export(40, "Chiamate")
570
+ ], ProfilerDataNode.prototype, "calls", void 0);
571
+ __decorate([
572
+ Export(50, "Tempo")
573
+ ], ProfilerDataNode.prototype, "time", void 0);
574
+ __decorate([
575
+ Export(60, "Tempo Max")
576
+ ], ProfilerDataNode.prototype, "peaktime", void 0);
577
+ __decorate([
578
+ Export(70, "Tempo Min")
579
+ ], ProfilerDataNode.prototype, "mintime", void 0);
580
+ __decorate([
581
+ Export(80, "Tempo Medio")
582
+ ], ProfilerDataNode.prototype, "avgtime", void 0);
583
+ __decorate([
584
+ Export(90, "Tempo Specifico")
585
+ ], ProfilerDataNode.prototype, "timewithoutchildren", void 0);
586
+ __decorate([
587
+ Export(100, "Percentuale")
588
+ ], ProfilerDataNode.prototype, "percentage", void 0);
589
+ __decorate([
590
+ Export(110, "Chiamate Periodo")
591
+ ], ProfilerDataNode.prototype, "snapdeltacalls", void 0);
592
+ __decorate([
593
+ Export(120, "Tempo Periodo")
594
+ ], ProfilerDataNode.prototype, "snapdeltatime", void 0);
595
+ __decorate([
596
+ Export(130, "Tempo Max Periodo")
597
+ ], ProfilerDataNode.prototype, "snappeaktime", void 0);
598
+ __decorate([
599
+ Export(140, "Tempo Min Periodo")
600
+ ], ProfilerDataNode.prototype, "snapmintime", void 0);
601
+ __decorate([
602
+ Export(150, "Tempo Medio Periodo")
603
+ ], ProfilerDataNode.prototype, "snapavgtime", void 0);
604
+ __decorate([
605
+ Export(160, "Tempo Specifico Periodo")
606
+ ], ProfilerDataNode.prototype, "snaptimewithoutchildren", void 0);
607
+ __decorate([
608
+ Export(170, "Percentuale Periodo")
609
+ ], ProfilerDataNode.prototype, "snappercentage", void 0);
610
+ __decorate([
611
+ Export(180, "Nome Tipologia Evento")
612
+ ], ProfilerDataNode.prototype, "eventtypename", void 0);
613
+ __decorate([
614
+ Export(190, "Nome Classe Attesa")
615
+ ], ProfilerDataNode.prototype, "waitclassname", void 0);
616
+ ProfilerDataNode = __decorate([
617
+ ExportLocalization(ProfilerDataNodeLoc)
618
+ ], ProfilerDataNode);
619
+
620
+ class ProfilerDataNodesView extends AppSearch {
621
+ constructor() { super(); }
622
+ }
623
+
624
+ class AdmProfilerComponentLoc extends LocalizationService {
625
+ constructor(injector) {
626
+ super(injector);
627
+ super.set("it->en", "Profiler del Server", ["Server Profiler"]);
628
+ super.set("it->en", "Carico i Dati", ["Loading Data"]);
629
+ super.set("it->en", "ID", ["ID"]);
630
+ super.set("it->en", "Descrizione", ["Description"]);
631
+ super.set("it->en", "Chiamate", ["Calls"]);
632
+ super.set("it->en", "Tempo", ["Time"]);
633
+ super.set("it->en", "Tempo Max", ["Peak Time"]);
634
+ super.set("it->en", "Tempo Min", ["Min. Time"]);
635
+ super.set("it->en", "Tempo Medio", ["Avg. Time"]);
636
+ super.set("it->en", "Tempo Specifico", ["Specific Time"]);
637
+ super.set("it->en", "Percentuale", ["Percentage"]);
638
+ super.set("it->en", "Chiamate Periodo", ["Calls for Period"]);
639
+ super.set("it->en", "Tempo Periodo", ["Time for Period"]);
640
+ super.set("it->en", "Tempo Max Periodo", ["Peak Time for Period"]);
641
+ super.set("it->en", "Tempo Min Periodo", ["Min. Time for Period"]);
642
+ super.set("it->en", "Tempo Medio Periodo", ["Avg. Time for Period"]);
643
+ super.set("it->en", "Tempo Specifico Periodo", ["Specific Time for Period"]);
644
+ super.set("it->en", "Percentuale Periodo", ["Percentage for Period"]);
645
+ super.set("it->en", "Nome Tipologia Evento", ["Event Type Name"]);
646
+ super.set("it->en", "Nome Classe Attesa", ["Wait Class Name"]);
647
+ }
648
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmProfilerComponentLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
649
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmProfilerComponentLoc }); }
650
+ }
651
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmProfilerComponentLoc, decorators: [{
652
+ type: Injectable
653
+ }], ctorParameters: () => [{ type: i0.Injector }] });
654
+
655
+ class NodeDetailLoc extends LocalizationService {
656
+ constructor(injector) {
657
+ super(injector);
658
+ super.set("it->en", "Sessioni Attive", ["Active Sessions"]);
659
+ super.set("it->en", "Dettaglio Attività Nodo", ["Activity Node Details"]);
660
+ super.set("it->en", "Tipo Evento", ["Event Type"]);
661
+ super.set("it->en", "Tempo Trascorso (Con Figli)", ["Elapsed (With Children)"]);
662
+ super.set("it->en", "Classe Attesa", ["Wait Class"]);
663
+ super.set("it->en", "Tempo Trascorso", ["Elapsed (No Children)"]);
664
+ super.set("it->en", "Stack di Attesa", ["Wait Stack"]);
665
+ super.set("it->en", "Utilizzo Risorse", ["Resources Usage"]);
666
+ super.set("it->en", "Esecuzioni", ["Executions"]);
667
+ super.set("it->en", "Dettaglio evento", ["Event detail"]);
668
+ }
669
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NodeDetailLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
670
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NodeDetailLoc }); }
671
+ }
672
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NodeDetailLoc, decorators: [{
673
+ type: Injectable
674
+ }], ctorParameters: () => [{ type: i0.Injector }] });
675
+
676
+ // Angular
677
+ class NodeDetailComponent {
678
+ constructor(lc) {
679
+ this.lc = lc;
680
+ this.onClose = new EventEmitter();
681
+ }
682
+ ngOnInit() {
683
+ let serie = new LineSerie(this.lc.loc("Sessioni Attive"), this.NodeDetails.activesessions);
684
+ this.NodeDetails.sessionchart = new LineChartData([serie]);
685
+ this.NodeDetails.loadchart = new PieChartData([
686
+ new KeyValueColor("CPU", this.NodeDetails.cpuperc),
687
+ new KeyValueColor("Wait", this.NodeDetails.waitperc),
688
+ new KeyValueColor("DB", this.NodeDetails.dbperc),
689
+ new KeyValueColor("Script", this.NodeDetails.scriptperc),
690
+ new KeyValueColor("Throttle", this.NodeDetails.throttleperc),
691
+ new KeyValueColor("Sleep", this.NodeDetails.sleepperc),
692
+ new KeyValueColor("Networking", this.NodeDetails.networkperc),
693
+ new KeyValueColor("IO", this.NodeDetails.ioperc)
694
+ ]);
695
+ }
696
+ closeDialog() {
697
+ this.onClose.emit(true);
698
+ }
699
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NodeDetailComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component }); }
700
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: NodeDetailComponent, isStandalone: false, selector: "node-detail", inputs: { NodeDetails: "NodeDetails" }, outputs: { onClose: "onClose" }, ngImport: i0, template: "<div class=\"modal-dialog modal-xl\" emaDraggable>\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title pull-left\">\r\n {{'Dettaglio Attivit\u00E0 Nodo' | localize: lc}}\r\n <span *ngIf=\"NodeDetails\">&nbsp;{{NodeDetails.nodeid}}</span>\r\n </h4>\r\n <button type=\"button\" class=\"close pull-right\" (click)=\"closeDialog()\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\" *ngIf=\"NodeDetails\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <strong>{{'Tipo Evento' | localize: lc}}</strong>:&nbsp;{{NodeDetails.eventtypedesc}}&nbsp;<strong>{{'Classe Attesa' | localize: lc}}</strong>:&nbsp;{{NodeDetails.waitclassname}}\r\n </div>\r\n <div class=\"col-md-6\">\r\n <strong>{{'Tempo Trascorso (Con Figli)' | localize: lc}}</strong>:&nbsp;{{NodeDetails.elapsed}}&nbsp;s\r\n </div>\r\n <div class=\"col-md-6\">\r\n\t\t\t\t\t<strong>{{'Esecuzioni' | localize: lc}}</strong>:&nbsp;{{NodeDetails.executions}}\r\n </div>\r\n <div class=\"col-md-6\">\r\n <strong>{{'Tempo Trascorso' | localize: lc}}</strong>:&nbsp;{{NodeDetails.elapsedlesschildren}}&nbsp;s\r\n </div>\r\n </div>\r\n\t\t\t<div>\r\n\t\t\t\t<h5 class=\"app-margin-top-10\"><strong>{{'Dettaglio evento' | localize: lc}}</strong></h5>\r\n\t\t\t\t{{NodeDetails.nodedescription}}\r\n\t\t\t</div>\r\n\t\t\t<div style=\"max-height: 200px; overflow: auto\" *ngIf=\"(NodeDetails?.waitstack?.length || 0) > 0\">\r\n <h5 class=\"app-margin-top-10\"><strong>{{'Stack di Attesa' | localize: lc}}</strong></h5>\r\n <div *ngFor=\"let wait of NodeDetails.waitstack; let i = index;\">\r\n <ng-container *ngFor=\"let _ of [].constructor(i+1)\">-</ng-container>&nbsp;{{wait.nodeid}}&nbsp;-&nbsp;{{wait.nodedescription}}:&nbsp;\r\n <strong>{{'Tipo Evento' | localize: lc}}</strong>:&nbsp;{{wait.eventtypedesc}}&nbsp;\r\n <strong>{{'Classe Attesa' | localize: lc}}</strong>:&nbsp;{{wait.waitclassname}}\r\n </div>\r\n </div>\r\n <div style=\"height: 200px;\">\r\n <h5 class=\"app-margin-top-10\"><strong>{{'Utilizzo Risorse' | localize: lc}}</strong></h5>\r\n <es-line-chart *ngIf=\"NodeDetails.sessionchart\"\r\n [MinGridDistance]=\"65\"\r\n [Timeline]=\"false\"\r\n [FinalInstants]=\"false\"\r\n [LegendPadding]=\"{top: 0, bottom: 7, right: 0, left: 10}\"\r\n [Fill]=\"true\"\r\n [MergeDatasets]=\"true\"\r\n [Data]=\"NodeDetails.sessionchart\"\r\n [Legend]=\"true\" \r\n name=\"nodeDetailSessionChart\"\r\n [DataGroupingThreshold]=\"99999999\"></es-line-chart>\r\n </div>\r\n <div style=\"height: 200px;\">\r\n <es-pie-chart *ngIf=\"NodeDetails.loadchart\" [Legend]=\"true\" [Data]=\"NodeDetails.loadchart\" name=\"nodeDetailLoadChart\"></es-pie-chart>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"closeDialog()\">{{'Chiudi' | localize: lc}}</button>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.EsLineChartComponent, selector: "es-line-chart", inputs: ["Data", "DataArray", "Step", "DataGroupBucketSize", "DataGroupingThreshold", "StrokeSize", "AllowGaps", "MergeDatasets", "FinalInstants", "Min", "Max", "Fill", "Stacked"] }, { kind: "component", type: i3$1.EsPieChartComponent, selector: "es-pie-chart", inputs: ["Data", "DataArray", "HideZeroes", "Mode3D", "DonutRadiusPercentage", "LabelsWrap", "LabelsTruncate", "LabelsWidth", "LabelsVisible"] }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }], viewProviders: [{ provide: LocalizationService, useClass: NodeDetailLoc }] }); }
701
+ }
702
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NodeDetailComponent, decorators: [{
703
+ type: Component,
704
+ args: [{ selector: "node-detail", viewProviders: [{ provide: LocalizationService, useClass: NodeDetailLoc }], standalone: false, template: "<div class=\"modal-dialog modal-xl\" emaDraggable>\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title pull-left\">\r\n {{'Dettaglio Attivit\u00E0 Nodo' | localize: lc}}\r\n <span *ngIf=\"NodeDetails\">&nbsp;{{NodeDetails.nodeid}}</span>\r\n </h4>\r\n <button type=\"button\" class=\"close pull-right\" (click)=\"closeDialog()\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\" *ngIf=\"NodeDetails\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <strong>{{'Tipo Evento' | localize: lc}}</strong>:&nbsp;{{NodeDetails.eventtypedesc}}&nbsp;<strong>{{'Classe Attesa' | localize: lc}}</strong>:&nbsp;{{NodeDetails.waitclassname}}\r\n </div>\r\n <div class=\"col-md-6\">\r\n <strong>{{'Tempo Trascorso (Con Figli)' | localize: lc}}</strong>:&nbsp;{{NodeDetails.elapsed}}&nbsp;s\r\n </div>\r\n <div class=\"col-md-6\">\r\n\t\t\t\t\t<strong>{{'Esecuzioni' | localize: lc}}</strong>:&nbsp;{{NodeDetails.executions}}\r\n </div>\r\n <div class=\"col-md-6\">\r\n <strong>{{'Tempo Trascorso' | localize: lc}}</strong>:&nbsp;{{NodeDetails.elapsedlesschildren}}&nbsp;s\r\n </div>\r\n </div>\r\n\t\t\t<div>\r\n\t\t\t\t<h5 class=\"app-margin-top-10\"><strong>{{'Dettaglio evento' | localize: lc}}</strong></h5>\r\n\t\t\t\t{{NodeDetails.nodedescription}}\r\n\t\t\t</div>\r\n\t\t\t<div style=\"max-height: 200px; overflow: auto\" *ngIf=\"(NodeDetails?.waitstack?.length || 0) > 0\">\r\n <h5 class=\"app-margin-top-10\"><strong>{{'Stack di Attesa' | localize: lc}}</strong></h5>\r\n <div *ngFor=\"let wait of NodeDetails.waitstack; let i = index;\">\r\n <ng-container *ngFor=\"let _ of [].constructor(i+1)\">-</ng-container>&nbsp;{{wait.nodeid}}&nbsp;-&nbsp;{{wait.nodedescription}}:&nbsp;\r\n <strong>{{'Tipo Evento' | localize: lc}}</strong>:&nbsp;{{wait.eventtypedesc}}&nbsp;\r\n <strong>{{'Classe Attesa' | localize: lc}}</strong>:&nbsp;{{wait.waitclassname}}\r\n </div>\r\n </div>\r\n <div style=\"height: 200px;\">\r\n <h5 class=\"app-margin-top-10\"><strong>{{'Utilizzo Risorse' | localize: lc}}</strong></h5>\r\n <es-line-chart *ngIf=\"NodeDetails.sessionchart\"\r\n [MinGridDistance]=\"65\"\r\n [Timeline]=\"false\"\r\n [FinalInstants]=\"false\"\r\n [LegendPadding]=\"{top: 0, bottom: 7, right: 0, left: 10}\"\r\n [Fill]=\"true\"\r\n [MergeDatasets]=\"true\"\r\n [Data]=\"NodeDetails.sessionchart\"\r\n [Legend]=\"true\" \r\n name=\"nodeDetailSessionChart\"\r\n [DataGroupingThreshold]=\"99999999\"></es-line-chart>\r\n </div>\r\n <div style=\"height: 200px;\">\r\n <es-pie-chart *ngIf=\"NodeDetails.loadchart\" [Legend]=\"true\" [Data]=\"NodeDetails.loadchart\" name=\"nodeDetailLoadChart\"></es-pie-chart>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"closeDialog()\">{{'Chiudi' | localize: lc}}</button>\r\n </div>\r\n </div>\r\n</div>" }]
705
+ }], ctorParameters: () => [{ type: i1.LocalizationService }], propDecorators: { NodeDetails: [{
706
+ type: Input
707
+ }], onClose: [{
708
+ type: Output
709
+ }] } });
710
+
711
+ // Angular
712
+ class AdmProfilerComponent {
713
+ constructor(lc, localStorage, location, intercom, route, adms, mod) {
714
+ this.lc = lc;
715
+ this.localStorage = localStorage;
716
+ this.location = location;
717
+ this.intercom = intercom;
718
+ this.route = route;
719
+ this.adms = adms;
720
+ this.mod = mod;
721
+ this.searchView = new ProfilerDataNodesView();
722
+ this.be = route.snapshot.params["be"] || "";
723
+ this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data["title"]) });
724
+ }
725
+ ngOnInit() {
726
+ this.storageSub = this.route.queryParams.subscribe(params => {
727
+ this.Init(params["ignoreStorage"]);
728
+ });
729
+ }
730
+ Init(ignoreStore) {
731
+ this.doInit(ignoreStore);
732
+ }
733
+ async doInit(ignoreStorage) {
734
+ let item = await this.localStorage.getItem("HotSearchProfilato").toPromise();
735
+ if (!ignoreStorage && item) {
736
+ this.init(item);
737
+ }
738
+ else {
739
+ this.init(null);
740
+ this.location.replaceState(`/pages/${this.mod}/profiler`);
741
+ this.route.snapshot.queryParams = [];
742
+ await this.localStorage.removeItem("HotSearchProfilato").toPromise();
743
+ }
744
+ }
745
+ init(HotPotato) {
746
+ if (HotPotato) {
747
+ this.searchView = HotPotato;
748
+ this.POSTGetItems(this.searchView);
749
+ }
750
+ else {
751
+ this.searchView = new ProfilerDataNodesView();
752
+ this.sendSearch();
753
+ }
754
+ }
755
+ ngOnDestroy() {
756
+ if (this.storageSub)
757
+ this.storageSub.unsubscribe();
758
+ }
759
+ sendSearch(resetPage = true) {
760
+ this.searchView.searchinprogress = true;
761
+ if (resetPage)
762
+ this.searchView.page = 1;
763
+ this.POSTGetItems(this.searchView);
764
+ }
765
+ downloadWorkloadReport() {
766
+ this.adms.downloadWorkloadReport(this.be, this.searchView.filterfrom, this.searchView.filterto);
767
+ }
768
+ async POSTGetItems(data) {
769
+ this.searchView = await this.adms.getProfilerDataNodes(this.be, data);
770
+ this.searchView.searchinprogress = false;
771
+ this.localStorage.setItem("HotSearchProfilato", this.searchView).subscribe();
772
+ }
773
+ async prepareExport(dataCallBack) {
774
+ var view = JSON.parse(JSON.stringify(this.searchView));
775
+ view.page = 1;
776
+ view.itemsperpageoverride = 9999999;
777
+ let res = await this.adms.getProfilerDataNodes(this.be, view);
778
+ dataCallBack(res.items, ProfilerDataNode);
779
+ }
780
+ loadNodeDetails(nodeId) {
781
+ this.NodeDetails = null;
782
+ requestAnimationFrame(async () => {
783
+ this.NodeDetails = await this.adms.getNodeStats(this.be, nodeId);
784
+ });
785
+ }
786
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmProfilerComponent, deps: [{ token: i1.LocalizationService }, { token: i3.PreferencesService }, { token: i5.Location }, { token: i1$1.InterComService }, { token: i4.ActivatedRoute }, { token: AdminModuleBaseService }, { token: ADM_MODULE_PATH }], target: i0.ɵɵFactoryTarget.Component }); }
787
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AdmProfilerComponent, isStandalone: false, selector: "adm_profiler", providers: [{ provide: LocalizationService, useClass: AdmProfilerComponentLoc }], ngImport: i0, 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\">{{'Profiler del Server' | 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]=\"'Da' | 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]=\"'A' | 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 app-margin-right-5\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n <button class=\"input-group-addon btn app-btn-search app-margin-top-20\" (click)=\"downloadWorkloadReport()\" type=\"submit\"><i class=\"fa fa-download\"></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>{{'Carico i Dati' | 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'\">{{'Descrizione' | localize: lc}}</span>\r\n <span *th=\"'3'\">{{'Chiamate' | localize: lc}}</span>\r\n <span *th=\"'4'\">{{'Tempo' | localize: lc}}</span>\r\n <span *th=\"'5'\">{{'Tempo Max' | localize: lc}}</span>\r\n <span *th=\"'6'\">{{'Tempo Min' | localize: lc}}</span>\r\n <span *th=\"'7'\">{{'Tempo Medio' | localize: lc}}</span>\r\n <span *th=\"'8'\">{{'Tempo Specifico' | localize: lc}}</span>\r\n <span *th=\"'9'\">{{'Percentuale' | localize: lc}}</span>\r\n <span *th=\"'10'\">{{'Chiamate Periodo' | localize: lc}}</span>\r\n <span *th=\"'11'\">{{'Tempo Periodo' | localize: lc}}</span>\r\n <span *th=\"'12'\">{{'Tempo Max Periodo' | localize: lc}}</span>\r\n <span *th=\"'13'\">{{'Tempo Min Periodo' | localize: lc}}</span>\r\n <span *th=\"'14'\">{{'Tempo Medio Periodo' | localize: lc}}</span>\r\n <span *th=\"'15'\">{{'Tempo Specifico Periodo' | localize: lc}}</span>\r\n <span *th=\"'16'\">{{'Percentuale Periodo' | localize: lc}}</span>\r\n <span *th=\"'17'\">{{'Nome Tipologia Evento' | localize: lc}}</span>\r\n <span *th=\"'18'\">{{'Nome Classe Attesa' | localize: lc}}</span>\r\n\r\n <span *td=\"'1'; let item\"><span class=\"app-link app-inline\" (click)=\"loadNodeDetails(item.id); dlgNodeDetails.show();\">{{item.id}}</span></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 <span *td=\"'17' let item\">{{item.eventtypename}}</span>\r\n <span *td=\"'18' let item\">{{item.waitclassname}}</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>\r\n\r\n<div bsModal #dlgNodeDetails=\"bs-modal\" class=\"modal fade\" role=\"dialog\" aria-hidden=\"true\">\r\n <node-detail *ngIf=\"NodeDetails\" [NodeDetails]=\"NodeDetails\" (onClose)=\"dlgNodeDetails.hide()\"></node-detail>\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.ModalDirective, selector: "[bsModal]", inputs: ["config", "closeInterceptor"], outputs: ["onShow", "onShown", "onHide", "onHidden"], exportAs: ["bs-modal"] }, { kind: "directive", type: i9.EsTdDirective, selector: "[td]", inputs: ["tdVisible", "td", "tdForProperty", "tdIf", "tdClass", "tdPropertyAccessor", "tdAlignment", "tdFormat", "tdIconClass", "tdConditionField", "tdConditionValue", "tdTitle", "tdContent"] }, { kind: "directive", type: i9.EsThDirective, selector: "[th]", inputs: ["th", "thPinned", "thPinnable", "thPinnedWidth", "thVisible", "thFixed", "thParent", "thOrder", "thOrderable", "thWrap", "thResizable", "thClass", "thShrink", "thGroupClass", "thIf", "thEmpty", "thGroup", "thAggregation", "thProperty", "thType", "thSource", "thMulti", "thStaticContent", "thBackgroundColor", "thAlignment", "thFormat", "thEditorName", "thEditorOptions", "thRendererName", "thRoutePath", "thRouteParameterProperties"] }, { kind: "component", type: i9.EsTableComponent, selector: "es-table", inputs: ["EsThTdProvider", "CornerMenuOptions", "ColumnsResizable", "ColumnsPinnable", "AutoUpdate", "Height", "EmptySpaceBackgroundColor", "EsTableHandledSearch", "MaxHeight", "ContainerClass", "XLSXExport", "CSVExport", "AllSearch", "HighCellDensity", "Selection", "ShowLoadingOnBootstrap", "Removal", "RemovalCondition", "Export", "ShiftClick", "CountLabel", "HidePaging", "HidePagingCount", "HidePagingButtons", "ContextMenu", "ExportFileName", "TableClass", "ExportFunction", "ExportOnlyVisibleColumns", "HasHeaderGroup", "HasSecondaryHeaderGroup", "HeaderHidden", "BodyHidden", "SelectionDisabled", "SingleSelection", "RowClassAssigner", "OrderByColumn", "MultipleOrderingDirectives", "HiddenColumns", "ColumnsOrdering", "SearchView", "SelectAll", "UseArrayModePaging", "DynamicRowColumnsDefinition", "DynamicOperations", "Hierarchy", "ParentKey", "OwnKey", "StartsExpanded", "SavePreferences", "DefaultAlignment", "PagingStyle", "RowGroupingPagingStyle", "ItemSourceProperty", "UseSelectionCache", "ShowItemGroupsColumns", "Editable", "RangeSelection", "SearchThrottle", "ArraymodeItemsPerPage"], outputs: ["onOrderChanged", "onSearchRequest", "onSelectionChanged", "onRemoval", "onAbortRemoval", "onModelChange", "onOpenContextMenu", "onCornerAction", "onDynamicOperation"] }, { kind: "component", type: i9$1.EsFormDateComponent, selector: "form-date", inputs: ["InOutFormat", "FloatingLabel"] }, { kind: "component", type: NodeDetailComponent, selector: "node-detail", inputs: ["NodeDetails"], outputs: ["onClose"] }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }] }); }
788
+ }
789
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmProfilerComponent, decorators: [{
790
+ type: Component,
791
+ args: [{ selector: "adm_profiler", providers: [{ provide: LocalizationService, useClass: AdmProfilerComponentLoc }], standalone: false, 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\">{{'Profiler del Server' | 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]=\"'Da' | 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]=\"'A' | 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 app-margin-right-5\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n <button class=\"input-group-addon btn app-btn-search app-margin-top-20\" (click)=\"downloadWorkloadReport()\" type=\"submit\"><i class=\"fa fa-download\"></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>{{'Carico i Dati' | 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'\">{{'Descrizione' | localize: lc}}</span>\r\n <span *th=\"'3'\">{{'Chiamate' | localize: lc}}</span>\r\n <span *th=\"'4'\">{{'Tempo' | localize: lc}}</span>\r\n <span *th=\"'5'\">{{'Tempo Max' | localize: lc}}</span>\r\n <span *th=\"'6'\">{{'Tempo Min' | localize: lc}}</span>\r\n <span *th=\"'7'\">{{'Tempo Medio' | localize: lc}}</span>\r\n <span *th=\"'8'\">{{'Tempo Specifico' | localize: lc}}</span>\r\n <span *th=\"'9'\">{{'Percentuale' | localize: lc}}</span>\r\n <span *th=\"'10'\">{{'Chiamate Periodo' | localize: lc}}</span>\r\n <span *th=\"'11'\">{{'Tempo Periodo' | localize: lc}}</span>\r\n <span *th=\"'12'\">{{'Tempo Max Periodo' | localize: lc}}</span>\r\n <span *th=\"'13'\">{{'Tempo Min Periodo' | localize: lc}}</span>\r\n <span *th=\"'14'\">{{'Tempo Medio Periodo' | localize: lc}}</span>\r\n <span *th=\"'15'\">{{'Tempo Specifico Periodo' | localize: lc}}</span>\r\n <span *th=\"'16'\">{{'Percentuale Periodo' | localize: lc}}</span>\r\n <span *th=\"'17'\">{{'Nome Tipologia Evento' | localize: lc}}</span>\r\n <span *th=\"'18'\">{{'Nome Classe Attesa' | localize: lc}}</span>\r\n\r\n <span *td=\"'1'; let item\"><span class=\"app-link app-inline\" (click)=\"loadNodeDetails(item.id); dlgNodeDetails.show();\">{{item.id}}</span></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 <span *td=\"'17' let item\">{{item.eventtypename}}</span>\r\n <span *td=\"'18' let item\">{{item.waitclassname}}</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>\r\n\r\n<div bsModal #dlgNodeDetails=\"bs-modal\" class=\"modal fade\" role=\"dialog\" aria-hidden=\"true\">\r\n <node-detail *ngIf=\"NodeDetails\" [NodeDetails]=\"NodeDetails\" (onClose)=\"dlgNodeDetails.hide()\"></node-detail>\r\n</div>" }]
792
+ }], ctorParameters: () => [{ type: i1.LocalizationService }, { type: i3.PreferencesService }, { type: i5.Location }, { type: i1$1.InterComService }, { type: i4.ActivatedRoute }, { type: AdminModuleBaseService }, { type: undefined, decorators: [{
793
+ type: Inject,
794
+ args: [ADM_MODULE_PATH]
795
+ }] }] });
796
+
797
+ class TopActivitiesDataView extends AppSearch {
798
+ constructor() { super(); }
799
+ }
800
+
801
+ class AdmTopActivitieLoc extends LocalizationService {
802
+ constructor(injector) {
803
+ super(injector);
804
+ super.set("it->en", "Sessioni Attive", ["Active Sessions"]);
805
+ super.set("it->en", "Prime Istruzioni", ["Top Nodes"]);
806
+ super.set("it->en", "Prime Sessioni", ["Top Sessions"]);
807
+ super.set("it->en", "Carico i Dati", ["Loading Data"]);
808
+ super.set("it->en", "Attività Principali", ["Top Activities"]);
809
+ super.set("it->en", "Descrizione Nodo", ["Node Description"]);
810
+ super.set("it->en", "Nodo", ["Node"]);
811
+ super.set("it->en", "Attività", ["Activity"]);
812
+ super.set("it->en", "Limite", ["Limit"]);
813
+ super.set("it->en", "Tipo Nodo", ["Node Type"]);
814
+ super.set("it->en", "Utente", ["User"]);
815
+ super.set("it->en", "Tenant", ["Tenant"]);
816
+ super.set("it->en", "Processo", ["Process"]);
817
+ super.set("it->en", "Aggiorna ogni", ["Update every"]);
818
+ super.set("it->en", "secondo/i", ["second/s"]);
819
+ super.set("it->en", "Thread Massimi", ["Maximum Threads"]);
820
+ super.set("it->en", "CPU", ["CPUs"]);
821
+ super.set("it->en", "Classe Attesa", ["Wait Class Name"]);
822
+ super.set("it->en", "Seriale", ["Serial"]);
823
+ super.set("it->en", "Stato", ["Status"]);
824
+ super.set("it->en", "Tipo", ["Type"]);
825
+ super.set("it->en", "Utente", ["User"]);
826
+ }
827
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmTopActivitieLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
828
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmTopActivitieLoc }); }
829
+ }
830
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmTopActivitieLoc, decorators: [{
831
+ type: Injectable
832
+ }], ctorParameters: () => [{ type: i0.Injector }] });
833
+
834
+ // Angular
835
+ class AdmTopActivitiesComponent {
836
+ constructor(dateExts, lc, localStorage, location, intercom, route, adms, mod) {
837
+ this.dateExts = dateExts;
838
+ this.lc = lc;
839
+ this.localStorage = localStorage;
840
+ this.location = location;
841
+ this.intercom = intercom;
842
+ this.route = route;
843
+ this.adms = adms;
844
+ this.mod = mod;
845
+ this.searchView = new TopActivitiesDataView();
846
+ this.autoUpdate = false;
847
+ this.seconds = "5";
848
+ this.rtWindow = null;
849
+ this.destroyed$ = new ReplaySubject(1);
850
+ this.seriesPropertiesMapping = {};
851
+ this.propertiesSeriesMapping = {
852
+ ["cputime"]: "CPU",
853
+ ["waittime"]: "Wait",
854
+ ["scripttime"]: "Scripting",
855
+ ["dbtime"]: "DB",
856
+ ["nettime"]: "Network",
857
+ ["throttletime"]: "Throttling",
858
+ ["sleeptime"]: "Sleep",
859
+ ["iotime"]: "IO"
860
+ };
861
+ this.seriesPropertiesMapping2 = {};
862
+ this.be = route.snapshot.params["be"] || "";
863
+ this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data["title"]) });
864
+ }
865
+ ngOnInit() {
866
+ // Ogni minuto calcolo qual è la finestra del realTime
867
+ interval(60 * 1000).pipe(takeUntil(this.destroyed$)).subscribe(_ => {
868
+ this.updateRealTimeWindow();
869
+ });
870
+ this.storageSub = this.route.queryParams.subscribe(params => {
871
+ this.Init(params["ignoreStorage"]);
872
+ });
873
+ }
874
+ async updateRealTimeWindow() {
875
+ let data = new TopActivitiesDataView();
876
+ data.filterbe = this.be;
877
+ data = await this.adms.getTopActivities(this.be, data);
878
+ let reference = data.items[0];
879
+ for (let i = 0; i < reference.actsessions.length; i++) {
880
+ let itemref = reference.actsessions[i];
881
+ let theD = this.dateExts.getDateConvertion(itemref.sampletime);
882
+ if (!this.rtWindow)
883
+ this.rtWindow = { from: theD, to: theD };
884
+ else {
885
+ if (theD.isBefore(this.rtWindow.from))
886
+ this.rtWindow.from = theD;
887
+ if (theD.isAfter(this.rtWindow.to))
888
+ this.rtWindow.to = theD;
889
+ }
890
+ }
891
+ }
892
+ Init(ignoreStore) {
893
+ this.doInit(ignoreStore);
894
+ }
895
+ async doInit(ignoreStorage) {
896
+ let item = await this.localStorage.getItem("HotSearchTopAct").toPromise();
897
+ if (!ignoreStorage && item) {
898
+ this.init(item);
899
+ }
900
+ else {
901
+ this.init(null);
902
+ this.location.replaceState(`/pages/${this.mod}/topact`);
903
+ this.route.snapshot.queryParams = [];
904
+ await this.localStorage.removeItem("HotSearchTopAct").toPromise();
905
+ }
906
+ }
907
+ init(HotPotato) {
908
+ if (HotPotato) {
909
+ this.searchView = HotPotato;
910
+ this.POSTGetItems(this.searchView, false);
911
+ }
912
+ else {
913
+ this.searchView = new TopActivitiesDataView();
914
+ this.sendSearch();
915
+ }
916
+ }
917
+ ngOnDestroy() {
918
+ this.destroyed$.next(true);
919
+ this.destroyed$.complete();
920
+ if (this.storageSub)
921
+ this.storageSub.unsubscribe();
922
+ }
923
+ async sendSearch(resetPage = true, update = false, searchViewOverride = null) {
924
+ let sv = searchViewOverride ?? this.searchView;
925
+ if ((sv.filterfrom || sv.filterto) && !this.rtWindow)
926
+ await this.updateRealTimeWindow();
927
+ let dateRequestOnRealtimeWindow = sv.filterfrom && this.dateExts.getDateConvertion(sv.filterfrom).isAfter(this.rtWindow.from) &&
928
+ sv.filterto && this.dateExts.getDateConvertion(sv.filterto).isBefore(this.rtWindow.to);
929
+ sv.filterrealtime = dateRequestOnRealtimeWindow;
930
+ sv.searchinprogress = true;
931
+ this.POSTGetItems(sv, update);
932
+ }
933
+ async POSTGetItems(data, update) {
934
+ data.filterbe = this.be;
935
+ let res = await this.adms.getTopActivities(this.be, data);
936
+ //Se sono in modalità di update non devo toccare la searchView attuale se non per il searchinprogress che viene messo dall'es table
937
+ if (!update) {
938
+ this.searchView = res;
939
+ this.localStorage.setItem("HotSearchTopAct", this.searchView).subscribe();
940
+ }
941
+ // DirectorInfos anche se per qualche motivo crasha di brutto è comunque non obbligatorio, evito di non caricare la pagina solo perché lui scoppia
942
+ let dirinfos = await this.adms.getInfos(this.be);
943
+ this.searchView.searchinprogress = false;
944
+ this.reviewBindings(update, res, dirinfos);
945
+ }
946
+ loadNodeDetails(nodeId) {
947
+ this.NodeDetails = null;
948
+ requestAnimationFrame(async () => {
949
+ this.NodeDetails = await this.adms.getNodeStats(this.be, nodeId);
950
+ });
951
+ }
952
+ reviewBindings(update, searchViewOverride, dirInfos) {
953
+ let reference = (searchViewOverride ?? this.searchView).items[0];
954
+ this.TopNodes = reference.topnodes;
955
+ this.TopSessions = reference.topsessions;
956
+ this.DirInfos = dirInfos;
957
+ if (!reference.actsessions || reference.actsessions.length == 0) {
958
+ this.TopActiveSessions = null;
959
+ return;
960
+ }
961
+ let series = [];
962
+ let props = Object.keys(reference.actsessions[0]);
963
+ for (let i = 0; i < props.length; i++) {
964
+ if (props[i] != 'sampletime') {
965
+ let s = new LineSerie(this.propertiesSeriesMapping[props[i]], [], null, null, "sessions");
966
+ series.push(s);
967
+ this.seriesPropertiesMapping[props[i]] = s;
968
+ }
969
+ }
970
+ for (let i = 0; i < reference.actsessions.length; i++) {
971
+ let itemref = reference.actsessions[i];
972
+ let theD = new Date(itemref.sampletime);
973
+ for (let i = 0; i < props.length; i++)
974
+ if (props[i] != 'sampletime' && (!update || this.dateExts.getDateConvertion(theD).isAfter(this.LastDataPoint)))
975
+ this.seriesPropertiesMapping[props[i]].values.push(new DateValue(theD, itemref[props[i]]));
976
+ }
977
+ if (update && this.ChartInstance) {
978
+ let data = new LineChartData(series, new Limit(dirInfos?.threads, this.lc.loc("Thread Massimi")));
979
+ if (series.some(t => t.values.length > 0)) {
980
+ this.ChartInstance.addData(data);
981
+ this.LastDataPoint = series.map(t => dayjs.max(t.values.map(v => this.dateExts.getDateConvertion(v.d))))[0];
982
+ }
983
+ }
984
+ else {
985
+ this.TopActiveSessions = new LineChartData(series, new Limit(dirInfos?.threads, this.lc.loc("Thread Massimi")));
986
+ this.LastDataPoint = series.map(t => dayjs.max(t.values.map(v => this.dateExts.getDateConvertion(v.d))))[0];
987
+ }
988
+ }
989
+ autoUpdateChanged() {
990
+ if (!/^[1-9]\d*$/.test(this.seconds))
991
+ this.seconds = '10';
992
+ const secondsInMs = parseInt(this.seconds, null) * 1000;
993
+ if (this.autoUpdate) {
994
+ this.sendSearch(false, true);
995
+ this.updateTimer = setInterval(() => { this.sendSearch(false, true); }, secondsInMs);
996
+ }
997
+ else
998
+ clearInterval(this.updateTimer);
999
+ }
1000
+ dataSelectionChanged(event) {
1001
+ this.from = event.initial ? (this.searchView.filterfrom ? this.dateExts.getDateConvertion(this.searchView.filterfrom).toDate() : "") : event.from;
1002
+ this.to = event.initial ? (this.searchView.filterto ? this.dateExts.getDateConvertion(this.searchView.filterto).toDate() : "") : event.to;
1003
+ var pseudoSearchView = JSON.parse(JSON.stringify(this.searchView));
1004
+ pseudoSearchView.filterfrom = this.from ? dayjs(this.from).format(this.lc.token("getFullDateDisplayFormat")) : "";
1005
+ pseudoSearchView.filterto = this.to ? dayjs(this.to).format(this.lc.token("getFullDateDisplayFormat")) : "";
1006
+ this.sendSearch(true, true, pseudoSearchView);
1007
+ }
1008
+ onChartLoaded(chart, overwriteInstance = true) {
1009
+ if (overwriteInstance)
1010
+ this.ChartInstance = chart;
1011
+ chart.Chart.events.on("ready", () => {
1012
+ chart.Chart.xAxes.each(x => x.zoom({ start: 0, end: 1 }, true, true));
1013
+ chart.Chart.yAxes.each(y => y.zoom({ start: 0, end: 1 }, true, true));
1014
+ setTimeout(() => {
1015
+ chart.Chart.xAxes.each(x => x.zoom({ start: 0, end: 1 }, true, true));
1016
+ chart.Chart.yAxes.each(y => y.zoom({ start: 0, end: 1 }, true, true));
1017
+ // 500 millisecondi è più o meno il tempo di prima animazione del grafico. Finito questo si resetta lo zoom
1018
+ }, 500);
1019
+ });
1020
+ }
1021
+ loadSessionDetails(sessionId, serialNo) {
1022
+ this.SessionDetails = null;
1023
+ requestAnimationFrame(async () => {
1024
+ this.SessionDetails = await this.adms.getSessionStats(this.be, sessionId?.toString(), serialNo?.toString());
1025
+ this.threadSelectionChanged(null);
1026
+ });
1027
+ }
1028
+ threadSelectionChanged(selection) {
1029
+ this.SelectedTopNodes = null;
1030
+ this.SelectedSessions = null;
1031
+ requestAnimationFrame(() => {
1032
+ let sessDet = (selection?.count || 0) == 0 ? this.SessionDetails : selection.items[0];
1033
+ this.SelectedTopNodes = sessDet.nodes;
1034
+ let series = [];
1035
+ let props = Object.keys(sessDet.sessions[0]);
1036
+ for (let i = 0; i < props.length; i++) {
1037
+ if (props[i] != 'sampletime') {
1038
+ let s = new LineSerie(this.propertiesSeriesMapping[props[i]], [], null, null, "sessions");
1039
+ series.push(s);
1040
+ this.seriesPropertiesMapping2[props[i]] = s;
1041
+ }
1042
+ }
1043
+ for (let i = 0; i < sessDet.sessions.length; i++) {
1044
+ let itemref = sessDet.sessions[i];
1045
+ let theD = new Date(itemref.sampletime);
1046
+ for (let i = 0; i < props.length; i++)
1047
+ if (props[i] != 'sampletime')
1048
+ this.seriesPropertiesMapping2[props[i]].values.push(new DateValue(theD, itemref[props[i]]));
1049
+ }
1050
+ this.SelectedSessions = new LineChartData(series);
1051
+ });
1052
+ }
1053
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmTopActivitiesComponent, deps: [{ token: i1$1.DateService }, { token: i1.LocalizationService }, { token: i3.PreferencesService }, { token: i5.Location }, { token: i1$1.InterComService }, { token: i4.ActivatedRoute }, { token: AdminModuleBaseService }, { token: ADM_MODULE_PATH }], target: i0.ɵɵFactoryTarget.Component }); }
1054
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AdmTopActivitiesComponent, isStandalone: false, selector: "topact_search", providers: [{ provide: LocalizationService, useClass: AdmTopActivitieLoc }], ngImport: i0, 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 {{'Attivit\u00E0 Principali' | localize: lc}}\r\n <span *ngIf=\"DirInfos\">&nbsp;-&nbsp;\r\n {{'' + DirInfos.cpus + ' ' + ('CPU' | localize: lc) + (DirInfos.rssplan ? ' - ' + DirInfos.rssplan : '')}}&nbsp;\r\n Load average: {{ DirInfos.lavg1 | number : '1.1-2' : 'it'}}&nbsp;{{ DirInfos.lavg5 | number : '1.1-2' : 'it'}}&nbsp;{{ DirInfos.lavg15 | number : '1.1-2' : 'it'}}\r\n </span>&nbsp;\r\n </span>\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <div class=\"col-md-12 app-relative\">\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-datetime [readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterfrom\" name=\"filterfrom\" [Placeholder]=\"'Da' | localize: lc\"></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]=\"'A' | localize: lc\"></form-datetime>\r\n </div>\r\n <button [disabled]=\"searchView.searchinprogress || autoUpdate\" 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\r\n <div class=\"app-absolute app-right-25 app-top-40\">\r\n <div class=\"pull-right\">\r\n {{'Aggiorna ogni' | localize: lc}}&nbsp;<input [readonly]=\"autoUpdate\" maxlength=\"3\" class=\"form-control app-updevery-input\" type=\"text\" [(ngModel)]=\"seconds\" name=\"seconds\" />&nbsp;{{'secondo/i' | 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\" name=\"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 </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12 app-margin-top-5\">\r\n <p *ngIf=\"!searchView\"><em>{{'Carico i Dati' | localize: lc}}</em></p>\r\n <div *ngIf=\"searchView\" class=\"row\">\r\n <div class=\"col-md-12 app-no-padding\">\r\n <div style=\"width: 100%; height: 290px\">\r\n <es-line-chart *ngIf=\"TopActiveSessions\"\r\n [MinGridDistance]=\"65\"\r\n [Timeline]=\"false\"\r\n [FinalInstants]=\"false\"\r\n [Stacked]=\"true\"\r\n [LegendPadding]=\"{top: 0, bottom: 7, right: 0, left: 10}\"\r\n [Fill]=\"true\"\r\n [MergeDatasets]=\"true\"\r\n [Data]=\"TopActiveSessions\"\r\n [Legend]=\"true\" \r\n name=\"topactsession\"\r\n [DataGroupingThreshold]=\"99999999\"\r\n (onSelectionChanged)=\"dataSelectionChanged($event)\" (chartLoaded)=\"onChartLoaded($event)\"></es-line-chart>\r\n </div>\r\n </div>\r\n <div class=\"col-md-5\">\r\n <h5>{{'Prime Istruzioni' | localize: lc}}</h5>\r\n <es-table [(ngModel)]=\"TopNodes\" [HidePaging]=\"true\">\r\n <ng-template #header>\r\n <th class=\"app-col-min\">{{'Nodo' | localize: lc}}</th>\r\n <th>{{'Descrizione Nodo' | localize: lc}}</th>\r\n <th class=\"app-col-min\">{{'Attivit\u00E0' | localize: lc}}</th>\r\n <th class=\"app-col-min app-nowrap\">{{'Tipo Nodo' | localize: lc}}</th>\r\n <th class=\"app-col-min app-nowrap\">{{'Classe Attesa' | localize: lc}}</th>\r\n </ng-template>\r\n <ng-template #body let-node>\r\n <td class=\"app-col-min\"><span class=\"app-link\" (click)=\"loadNodeDetails(node.profnodeid); dlgNodeDetails.show();\">{{node.profnodeid}}</span></td>\r\n <td><span title=\"{{node.profnodedesc}}\">{{node.profnodedesc.length > 40 ? node.profnodedesc.substr(0,40) + \"...\" : node.profnodedesc}}</span></td>\r\n <td class=\"app-nowrap\">{{node.activity | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{node.nodetypename}}</td>\r\n <td>{{node.waitclassname}}</td>\r\n </ng-template>\r\n </es-table>\r\n </div>\r\n <div class=\"col-md-7\">\r\n <h5>{{'Prime Sessioni' | localize: lc}}</h5>\r\n <es-table [(ngModel)]=\"TopSessions\" [HidePaging]=\"true\">\r\n <ng-template #header>\r\n <th class=\"app-col-min\">ID</th>\r\n <th>{{'Utente' | localize: lc}}</th>\r\n <th>{{'Tenant' | localize : lc}}</th>\r\n <th>{{'Processo' | localize: lc}}</th>\r\n <th>{{'Attivit\u00E0' | localize: lc}}</th>\r\n <th>Cpu</th>\r\n <th>Wait</th>\r\n <th>DB</th>\r\n <th>Script</th>\r\n <th>Throttle</th>\r\n <th>Sleep</th>\r\n <th>Networking</th>\r\n <th>IO</th>\r\n </ng-template>\r\n\r\n <ng-template #body let-session>\r\n <td class=\"app-col-min\"><span class=\"app-link\" (click)=\"loadSessionDetails(session.sid, session.serial); dlgSessionDetails.show();\">{{session.sid}}</span></td>\r\n <td>{{session.user}}</td>\r\n <td>{{session.tenant}}</td>\r\n <td>{{session.bgprocess}}</td>\r\n <td>{{session.activity | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.cpu | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.wait | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.db | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.script | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.throttle | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.sleep | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.net | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.io | number : '1.1-2' : 'it'}} %</td>\r\n </ng-template>\r\n </es-table>\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>\r\n\r\n<div bsModal #dlgNodeDetails=\"bs-modal\" class=\"modal fade\" role=\"dialog\" aria-hidden=\"true\">\r\n <node-detail *ngIf=\"NodeDetails\" [NodeDetails]=\"NodeDetails\" (onClose)=\"dlgNodeDetails.hide()\"></node-detail>\r\n</div>\r\n\r\n<div bsModal #dlgSessionDetails=\"bs-modal\" class=\"modal fade\" role=\"dialog\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-feminist\" emaDraggable>\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title pull-left\">{{'Dettaglio Sessione' | localize: lc}}<span *ngIf=\"SessionDetails\">&nbsp;{{SessionDetails.sid}}</span></h4>\r\n <button type=\"button\" class=\"close pull-right\" (click)=\"dlgSessionDetails.hide()\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\r\n </div>\r\n <div class=\"modal-body\" *ngIf=\"SessionDetails\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\"><strong>{{'Seriale' | localize: lc}}</strong>:&nbsp;{{SessionDetails.serial}}&nbsp;</div>\r\n <div class=\"col-md-6\"><strong>{{'Stato' | localize: lc}}</strong>:&nbsp;{{SessionDetails.status}}&nbsp;</div>\r\n <div class=\"col-md-6\"><strong>{{'Tipo' | localize: lc}}</strong>:&nbsp;{{SessionDetails.type}}</div>\r\n <div class=\"col-md-6\"><strong>{{'Utente' | localize: lc}}</strong>:&nbsp;{{SessionDetails.user}}&nbsp;<span *ngIf=\"SessionDetails.tenant\">({{SessionDetails.tenant}})</span></div>\r\n </div>\r\n\r\n <div style=\"display: flex; width: 100%; margin-top: 15px;\">\r\n <div style=\"flex-grow: 0;display: flex;flex-direction: column\">\r\n <h5>Prime Istruzioni</h5>\r\n <div *ngIf=\"SelectedTopNodes\">\r\n <es-table [(ngModel)]=\"SelectedTopNodes\" [ArraymodeItemsPerPage]=\"10\">\r\n <ng-template #header>\r\n <th class=\"app-col-min\">{{'Nodo' | localize: lc}}</th>\r\n <th>{{'Descrizione Nodo' | localize: lc}}</th>\r\n <th class=\"app-col-min\">{{'Attivit\u00E0' | localize: lc}}</th>\r\n <th class=\"app-col-min app-nowrap\">{{'Tipo Nodo' | localize: lc}}</th>\r\n <th class=\"app-col-min app-nowrap\">{{'Classe Attesa' | localize: lc}}</th>\r\n </ng-template>\r\n \r\n <ng-template #body let-node>\r\n <td class=\"app-col-min\"><span class=\"app-link\"(click)=\"loadNodeDetails(node.profnodeid); dlgNodeDetails.show();\">{{node.profnodeid}}</span></td>\r\n <td><span title=\"{{node.profnodedesc}}\">{{node.profnodedesc.length > 40 ? node.profnodedesc.substr(0,40) + \"...\" : node.profnodedesc}}</span></td>\r\n <td class=\"app-nowrap\">{{(node.activity == \"NaN\" ? null : node.activity) | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{node.nodetypename}}</td>\r\n <td>{{node.waitclassname}}</td>\r\n </ng-template>\r\n </es-table>\r\n </div>\r\n </div>\r\n <div style=\"width: 15px;\"></div>\r\n <div style=\"flex-grow: 2;display: flex;flex-direction: column\">\r\n <h5>Attivit\u00E0</h5>\r\n <div *ngIf=\"SelectedSessions\" style=\"width: 100%; height: 290px\">\r\n <es-line-chart [MinGridDistance]=\"65\"\r\n [Timeline]=\"false\"\r\n [FinalInstants]=\"false\"\r\n [Stacked]=\"true\"\r\n [LegendPadding]=\"{top: 0, bottom: 7, right: 0, left: 10}\"\r\n [Fill]=\"true\"\r\n [MergeDatasets]=\"true\"\r\n [Data]=\"TopActiveSessions\"\r\n [Legend]=\"true\" \r\n name=\"session_details\"\r\n [DataGroupingThreshold]=\"99999999\"\r\n (chartLoaded)=\"onChartLoaded($event, true)\">\r\n </es-line-chart>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"display: flex; width: 100%;\">\r\n <div style=\"flex-grow: 1;\">\r\n <h5>Statistiche Thread</h5>\r\n <div>\r\n <es-table [(ngModel)]=\"SessionDetails.threads\" [ArraymodeItemsPerPage]=\"10\" [Selection]=\"true\" [SingleSelection]=\"true\" (onSelectionChanged)=\"threadSelectionChanged($event)\">\r\n <ng-template #header>\r\n <th>Thread</th>\r\n <th>Stato</th>\r\n <th>Tipo</th>\r\n <th>API</th>\r\n <th>Attesa corrente</th>\r\n <th>Nodo di attesa</th>\r\n <th>Attesa su</th>\r\n <th>Classe</th>\r\n <th>Par. 1</th>\r\n <th>Par. 2</th>\r\n <th>Par. 3</th>\r\n <th>Tempo Attesa</th>\r\n </ng-template>\r\n \r\n <ng-template #body let-thread>\r\n <td>{{thread.tid}}</td>\r\n <td>{{thread.status}}</td>\r\n <td>{{thread.type}}</td>\r\n <td>{{thread.api}}</td>\r\n <td>{{thread.wait}}</td>\r\n <td>{{thread.waitnode}}</td>\r\n <td>{{thread.waiteventtype}}</td>\r\n <td>{{thread.waitclassname}}</td>\r\n <td>{{thread.waitpar1}}</td>\r\n <td>{{thread.waitpar2}}</td>\r\n <td>{{thread.waitpar3}}</td>\r\n <td>{{(thread.waittime == \"NaN\" ? null : thread.waittime) | number : '1.1-2' : 'it'}}</td>\r\n </ng-template>\r\n </es-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"dlgSessionDetails.hide()\">{{'Chiudi' | localize: lc}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.ModalDirective, selector: "[bsModal]", inputs: ["config", "closeInterceptor"], outputs: ["onShow", "onShown", "onHide", "onHidden"], exportAs: ["bs-modal"] }, { kind: "component", type: i9.EsTableComponent, selector: "es-table", inputs: ["EsThTdProvider", "CornerMenuOptions", "ColumnsResizable", "ColumnsPinnable", "AutoUpdate", "Height", "EmptySpaceBackgroundColor", "EsTableHandledSearch", "MaxHeight", "ContainerClass", "XLSXExport", "CSVExport", "AllSearch", "HighCellDensity", "Selection", "ShowLoadingOnBootstrap", "Removal", "RemovalCondition", "Export", "ShiftClick", "CountLabel", "HidePaging", "HidePagingCount", "HidePagingButtons", "ContextMenu", "ExportFileName", "TableClass", "ExportFunction", "ExportOnlyVisibleColumns", "HasHeaderGroup", "HasSecondaryHeaderGroup", "HeaderHidden", "BodyHidden", "SelectionDisabled", "SingleSelection", "RowClassAssigner", "OrderByColumn", "MultipleOrderingDirectives", "HiddenColumns", "ColumnsOrdering", "SearchView", "SelectAll", "UseArrayModePaging", "DynamicRowColumnsDefinition", "DynamicOperations", "Hierarchy", "ParentKey", "OwnKey", "StartsExpanded", "SavePreferences", "DefaultAlignment", "PagingStyle", "RowGroupingPagingStyle", "ItemSourceProperty", "UseSelectionCache", "ShowItemGroupsColumns", "Editable", "RangeSelection", "SearchThrottle", "ArraymodeItemsPerPage"], outputs: ["onOrderChanged", "onSearchRequest", "onSelectionChanged", "onRemoval", "onAbortRemoval", "onModelChange", "onOpenContextMenu", "onCornerAction", "onDynamicOperation"] }, { kind: "component", type: i9$1.EsFormDateTimeComponent, selector: "form-datetime" }, { kind: "component", type: i3$1.EsLineChartComponent, selector: "es-line-chart", inputs: ["Data", "DataArray", "Step", "DataGroupBucketSize", "DataGroupingThreshold", "StrokeSize", "AllowGaps", "MergeDatasets", "FinalInstants", "Min", "Max", "Fill", "Stacked"] }, { kind: "component", type: NodeDetailComponent, selector: "node-detail", inputs: ["NodeDetails"], outputs: ["onClose"] }, { kind: "pipe", type: i5.DecimalPipe, name: "number" }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }] }); }
1055
+ }
1056
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmTopActivitiesComponent, decorators: [{
1057
+ type: Component,
1058
+ args: [{ selector: "topact_search", providers: [{ provide: LocalizationService, useClass: AdmTopActivitieLoc }], standalone: false, 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 {{'Attivit\u00E0 Principali' | localize: lc}}\r\n <span *ngIf=\"DirInfos\">&nbsp;-&nbsp;\r\n {{'' + DirInfos.cpus + ' ' + ('CPU' | localize: lc) + (DirInfos.rssplan ? ' - ' + DirInfos.rssplan : '')}}&nbsp;\r\n Load average: {{ DirInfos.lavg1 | number : '1.1-2' : 'it'}}&nbsp;{{ DirInfos.lavg5 | number : '1.1-2' : 'it'}}&nbsp;{{ DirInfos.lavg15 | number : '1.1-2' : 'it'}}\r\n </span>&nbsp;\r\n </span>\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <div class=\"col-md-12 app-relative\">\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-datetime [readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterfrom\" name=\"filterfrom\" [Placeholder]=\"'Da' | localize: lc\"></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]=\"'A' | localize: lc\"></form-datetime>\r\n </div>\r\n <button [disabled]=\"searchView.searchinprogress || autoUpdate\" 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\r\n <div class=\"app-absolute app-right-25 app-top-40\">\r\n <div class=\"pull-right\">\r\n {{'Aggiorna ogni' | localize: lc}}&nbsp;<input [readonly]=\"autoUpdate\" maxlength=\"3\" class=\"form-control app-updevery-input\" type=\"text\" [(ngModel)]=\"seconds\" name=\"seconds\" />&nbsp;{{'secondo/i' | 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\" name=\"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 </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12 app-margin-top-5\">\r\n <p *ngIf=\"!searchView\"><em>{{'Carico i Dati' | localize: lc}}</em></p>\r\n <div *ngIf=\"searchView\" class=\"row\">\r\n <div class=\"col-md-12 app-no-padding\">\r\n <div style=\"width: 100%; height: 290px\">\r\n <es-line-chart *ngIf=\"TopActiveSessions\"\r\n [MinGridDistance]=\"65\"\r\n [Timeline]=\"false\"\r\n [FinalInstants]=\"false\"\r\n [Stacked]=\"true\"\r\n [LegendPadding]=\"{top: 0, bottom: 7, right: 0, left: 10}\"\r\n [Fill]=\"true\"\r\n [MergeDatasets]=\"true\"\r\n [Data]=\"TopActiveSessions\"\r\n [Legend]=\"true\" \r\n name=\"topactsession\"\r\n [DataGroupingThreshold]=\"99999999\"\r\n (onSelectionChanged)=\"dataSelectionChanged($event)\" (chartLoaded)=\"onChartLoaded($event)\"></es-line-chart>\r\n </div>\r\n </div>\r\n <div class=\"col-md-5\">\r\n <h5>{{'Prime Istruzioni' | localize: lc}}</h5>\r\n <es-table [(ngModel)]=\"TopNodes\" [HidePaging]=\"true\">\r\n <ng-template #header>\r\n <th class=\"app-col-min\">{{'Nodo' | localize: lc}}</th>\r\n <th>{{'Descrizione Nodo' | localize: lc}}</th>\r\n <th class=\"app-col-min\">{{'Attivit\u00E0' | localize: lc}}</th>\r\n <th class=\"app-col-min app-nowrap\">{{'Tipo Nodo' | localize: lc}}</th>\r\n <th class=\"app-col-min app-nowrap\">{{'Classe Attesa' | localize: lc}}</th>\r\n </ng-template>\r\n <ng-template #body let-node>\r\n <td class=\"app-col-min\"><span class=\"app-link\" (click)=\"loadNodeDetails(node.profnodeid); dlgNodeDetails.show();\">{{node.profnodeid}}</span></td>\r\n <td><span title=\"{{node.profnodedesc}}\">{{node.profnodedesc.length > 40 ? node.profnodedesc.substr(0,40) + \"...\" : node.profnodedesc}}</span></td>\r\n <td class=\"app-nowrap\">{{node.activity | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{node.nodetypename}}</td>\r\n <td>{{node.waitclassname}}</td>\r\n </ng-template>\r\n </es-table>\r\n </div>\r\n <div class=\"col-md-7\">\r\n <h5>{{'Prime Sessioni' | localize: lc}}</h5>\r\n <es-table [(ngModel)]=\"TopSessions\" [HidePaging]=\"true\">\r\n <ng-template #header>\r\n <th class=\"app-col-min\">ID</th>\r\n <th>{{'Utente' | localize: lc}}</th>\r\n <th>{{'Tenant' | localize : lc}}</th>\r\n <th>{{'Processo' | localize: lc}}</th>\r\n <th>{{'Attivit\u00E0' | localize: lc}}</th>\r\n <th>Cpu</th>\r\n <th>Wait</th>\r\n <th>DB</th>\r\n <th>Script</th>\r\n <th>Throttle</th>\r\n <th>Sleep</th>\r\n <th>Networking</th>\r\n <th>IO</th>\r\n </ng-template>\r\n\r\n <ng-template #body let-session>\r\n <td class=\"app-col-min\"><span class=\"app-link\" (click)=\"loadSessionDetails(session.sid, session.serial); dlgSessionDetails.show();\">{{session.sid}}</span></td>\r\n <td>{{session.user}}</td>\r\n <td>{{session.tenant}}</td>\r\n <td>{{session.bgprocess}}</td>\r\n <td>{{session.activity | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.cpu | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.wait | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.db | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.script | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.throttle | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.sleep | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.net | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{session.io | number : '1.1-2' : 'it'}} %</td>\r\n </ng-template>\r\n </es-table>\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>\r\n\r\n<div bsModal #dlgNodeDetails=\"bs-modal\" class=\"modal fade\" role=\"dialog\" aria-hidden=\"true\">\r\n <node-detail *ngIf=\"NodeDetails\" [NodeDetails]=\"NodeDetails\" (onClose)=\"dlgNodeDetails.hide()\"></node-detail>\r\n</div>\r\n\r\n<div bsModal #dlgSessionDetails=\"bs-modal\" class=\"modal fade\" role=\"dialog\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-feminist\" emaDraggable>\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title pull-left\">{{'Dettaglio Sessione' | localize: lc}}<span *ngIf=\"SessionDetails\">&nbsp;{{SessionDetails.sid}}</span></h4>\r\n <button type=\"button\" class=\"close pull-right\" (click)=\"dlgSessionDetails.hide()\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\r\n </div>\r\n <div class=\"modal-body\" *ngIf=\"SessionDetails\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\"><strong>{{'Seriale' | localize: lc}}</strong>:&nbsp;{{SessionDetails.serial}}&nbsp;</div>\r\n <div class=\"col-md-6\"><strong>{{'Stato' | localize: lc}}</strong>:&nbsp;{{SessionDetails.status}}&nbsp;</div>\r\n <div class=\"col-md-6\"><strong>{{'Tipo' | localize: lc}}</strong>:&nbsp;{{SessionDetails.type}}</div>\r\n <div class=\"col-md-6\"><strong>{{'Utente' | localize: lc}}</strong>:&nbsp;{{SessionDetails.user}}&nbsp;<span *ngIf=\"SessionDetails.tenant\">({{SessionDetails.tenant}})</span></div>\r\n </div>\r\n\r\n <div style=\"display: flex; width: 100%; margin-top: 15px;\">\r\n <div style=\"flex-grow: 0;display: flex;flex-direction: column\">\r\n <h5>Prime Istruzioni</h5>\r\n <div *ngIf=\"SelectedTopNodes\">\r\n <es-table [(ngModel)]=\"SelectedTopNodes\" [ArraymodeItemsPerPage]=\"10\">\r\n <ng-template #header>\r\n <th class=\"app-col-min\">{{'Nodo' | localize: lc}}</th>\r\n <th>{{'Descrizione Nodo' | localize: lc}}</th>\r\n <th class=\"app-col-min\">{{'Attivit\u00E0' | localize: lc}}</th>\r\n <th class=\"app-col-min app-nowrap\">{{'Tipo Nodo' | localize: lc}}</th>\r\n <th class=\"app-col-min app-nowrap\">{{'Classe Attesa' | localize: lc}}</th>\r\n </ng-template>\r\n \r\n <ng-template #body let-node>\r\n <td class=\"app-col-min\"><span class=\"app-link\"(click)=\"loadNodeDetails(node.profnodeid); dlgNodeDetails.show();\">{{node.profnodeid}}</span></td>\r\n <td><span title=\"{{node.profnodedesc}}\">{{node.profnodedesc.length > 40 ? node.profnodedesc.substr(0,40) + \"...\" : node.profnodedesc}}</span></td>\r\n <td class=\"app-nowrap\">{{(node.activity == \"NaN\" ? null : node.activity) | number : '1.1-2' : 'it'}} %</td>\r\n <td>{{node.nodetypename}}</td>\r\n <td>{{node.waitclassname}}</td>\r\n </ng-template>\r\n </es-table>\r\n </div>\r\n </div>\r\n <div style=\"width: 15px;\"></div>\r\n <div style=\"flex-grow: 2;display: flex;flex-direction: column\">\r\n <h5>Attivit\u00E0</h5>\r\n <div *ngIf=\"SelectedSessions\" style=\"width: 100%; height: 290px\">\r\n <es-line-chart [MinGridDistance]=\"65\"\r\n [Timeline]=\"false\"\r\n [FinalInstants]=\"false\"\r\n [Stacked]=\"true\"\r\n [LegendPadding]=\"{top: 0, bottom: 7, right: 0, left: 10}\"\r\n [Fill]=\"true\"\r\n [MergeDatasets]=\"true\"\r\n [Data]=\"TopActiveSessions\"\r\n [Legend]=\"true\" \r\n name=\"session_details\"\r\n [DataGroupingThreshold]=\"99999999\"\r\n (chartLoaded)=\"onChartLoaded($event, true)\">\r\n </es-line-chart>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"display: flex; width: 100%;\">\r\n <div style=\"flex-grow: 1;\">\r\n <h5>Statistiche Thread</h5>\r\n <div>\r\n <es-table [(ngModel)]=\"SessionDetails.threads\" [ArraymodeItemsPerPage]=\"10\" [Selection]=\"true\" [SingleSelection]=\"true\" (onSelectionChanged)=\"threadSelectionChanged($event)\">\r\n <ng-template #header>\r\n <th>Thread</th>\r\n <th>Stato</th>\r\n <th>Tipo</th>\r\n <th>API</th>\r\n <th>Attesa corrente</th>\r\n <th>Nodo di attesa</th>\r\n <th>Attesa su</th>\r\n <th>Classe</th>\r\n <th>Par. 1</th>\r\n <th>Par. 2</th>\r\n <th>Par. 3</th>\r\n <th>Tempo Attesa</th>\r\n </ng-template>\r\n \r\n <ng-template #body let-thread>\r\n <td>{{thread.tid}}</td>\r\n <td>{{thread.status}}</td>\r\n <td>{{thread.type}}</td>\r\n <td>{{thread.api}}</td>\r\n <td>{{thread.wait}}</td>\r\n <td>{{thread.waitnode}}</td>\r\n <td>{{thread.waiteventtype}}</td>\r\n <td>{{thread.waitclassname}}</td>\r\n <td>{{thread.waitpar1}}</td>\r\n <td>{{thread.waitpar2}}</td>\r\n <td>{{thread.waitpar3}}</td>\r\n <td>{{(thread.waittime == \"NaN\" ? null : thread.waittime) | number : '1.1-2' : 'it'}}</td>\r\n </ng-template>\r\n </es-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"dlgSessionDetails.hide()\">{{'Chiudi' | localize: lc}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
1059
+ }], ctorParameters: () => [{ type: i1$1.DateService }, { type: i1.LocalizationService }, { type: i3.PreferencesService }, { type: i5.Location }, { type: i1$1.InterComService }, { type: i4.ActivatedRoute }, { type: AdminModuleBaseService }, { type: undefined, decorators: [{
1060
+ type: Inject,
1061
+ args: [ADM_MODULE_PATH]
1062
+ }] }] });
1063
+
1064
+ class LocksView extends AppSearch {
1065
+ constructor() { super(); }
1066
+ }
1067
+
1068
+ class AdmEnqLoc extends LocalizationService {
1069
+ constructor(injector) {
1070
+ super(injector);
1071
+ super.set("it->en", "Ricerca Lock Applicativi", ["Search Application Locks"]);
1072
+ super.set("it->en", "Nome", ["Name"]);
1073
+ super.set("it->en", "Carico i Lock Applicativi", ["Loading Application Locks"]);
1074
+ super.set("it->en", "Globale", ["Global"]);
1075
+ }
1076
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmEnqLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
1077
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmEnqLoc }); }
1078
+ }
1079
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmEnqLoc, decorators: [{
1080
+ type: Injectable
1081
+ }], ctorParameters: () => [{ type: i0.Injector }] });
1082
+
1083
+ // Angular
1084
+ class AdmEnqComponent {
1085
+ constructor(lc, localStorage, expExts, intercom, route, location, adms, mod) {
1086
+ this.lc = lc;
1087
+ this.localStorage = localStorage;
1088
+ this.expExts = expExts;
1089
+ this.intercom = intercom;
1090
+ this.route = route;
1091
+ this.location = location;
1092
+ this.adms = adms;
1093
+ this.mod = mod;
1094
+ this.locksView = new LocksView();
1095
+ this.be = route.snapshot.params["be"] || "";
1096
+ this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data["title"]) });
1097
+ }
1098
+ ngOnInit() {
1099
+ this.storageSub = this.route.queryParams.subscribe(params => { this.Init(params["ignoreStorage"]); });
1100
+ }
1101
+ ngOnDestroy() {
1102
+ if (this.storageSub)
1103
+ this.storageSub.unsubscribe();
1104
+ }
1105
+ async Init(ignoreStorage) {
1106
+ let item = await this.localStorage.getItem("HotEnqueue").toPromise();
1107
+ if (!ignoreStorage && item) {
1108
+ this.init(item);
1109
+ }
1110
+ else {
1111
+ this.init(null);
1112
+ this.location.replaceState(`/pages/${this.mod}/serverenqueues`);
1113
+ this.route.snapshot.queryParams = [];
1114
+ await this.localStorage.removeItem("HotEnqueue").toPromise();
1115
+ }
1116
+ }
1117
+ init(HotPotato) {
1118
+ if (HotPotato) {
1119
+ this.locksView = HotPotato;
1120
+ this.POSTGetProcesses(this.locksView);
1121
+ }
1122
+ else {
1123
+ this.locksView = new LocksView();
1124
+ this.sendSearch();
1125
+ }
1126
+ }
1127
+ sendSearch(resetPage = true) {
1128
+ if (resetPage)
1129
+ this.locksView.page = 1;
1130
+ this.POSTGetProcesses(this.locksView);
1131
+ }
1132
+ async POSTGetProcesses(data) {
1133
+ this.locksView = await this.adms.getServerLocks(this.be, data);
1134
+ this.locksView.searchinprogress = false;
1135
+ this.localStorage.setItem("HotEnqueue", this.locksView).subscribe();
1136
+ }
1137
+ async prepareExport(callback) {
1138
+ var view = JSON.parse(JSON.stringify(this.locksView));
1139
+ view.page = 1;
1140
+ view.itemsperpageoverride = 9999999;
1141
+ let tmp = await this.adms.getServerLocks(this.be, view);
1142
+ callback(tmp.items, GenericItem);
1143
+ }
1144
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmEnqComponent, deps: [{ token: i1.LocalizationService }, { token: i3.PreferencesService }, { token: i1$1.ExportService }, { token: i1$1.InterComService }, { token: i4.ActivatedRoute }, { token: i5.Location }, { token: AdminModuleBaseService }, { token: ADM_MODULE_PATH }], target: i0.ɵɵFactoryTarget.Component }); }
1145
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AdmEnqComponent, isStandalone: false, selector: "adm_enq", ngImport: i0, 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\">{{'Ricerca Lock Applicativi' | localize: lc}}</span>\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <form role=\"form\">\r\n <div class=\"col-md-12 row app-first-filter-line\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"locksView.filtersid\" name=\"filtersid\" [Placeholder]=\"'SID'\"></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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"locksView.filterlock\" name=\"filterlock\" [Placeholder]=\"'Nome' | localize: lc\"></form-input>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\" style=\"display: flex; height: 38px;\">\r\n <form-checkbox [FormLayout]=\"false\" [SliderMode]=\"true\" [Validation]=\"false\" [(ngModel)]=\"locksView.filterglobal\" name=\"filterglobal\"></form-checkbox>&nbsp;\r\n <span class=\"app-pointer app-padding-top-5 app-padding-left-5\" (click)=\"locksView.filterglobal = !locksView.filterglobal\">{{'Globale' | localize: lc}}</span>\r\n </div>\r\n <button 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 class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!locksView\"><em>{{'Carico i Lock Applicativi' | localize: lc}}...</em></p>\r\n <div *ngIf=\"locksView\">\r\n <es-table [(ngModel)]=\"locksView\" [AutoUpdate]=\"true\" [OrderByColumn]=\"true\" (onSearchRequest)=\"sendSearch($event);\"\r\n [ExportFileName]=\"'Application Locks.csv'\" [ExportFunction]=\"prepareExport.bind(this)\"></es-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i9.EsTableComponent, selector: "es-table", inputs: ["EsThTdProvider", "CornerMenuOptions", "ColumnsResizable", "ColumnsPinnable", "AutoUpdate", "Height", "EmptySpaceBackgroundColor", "EsTableHandledSearch", "MaxHeight", "ContainerClass", "XLSXExport", "CSVExport", "AllSearch", "HighCellDensity", "Selection", "ShowLoadingOnBootstrap", "Removal", "RemovalCondition", "Export", "ShiftClick", "CountLabel", "HidePaging", "HidePagingCount", "HidePagingButtons", "ContextMenu", "ExportFileName", "TableClass", "ExportFunction", "ExportOnlyVisibleColumns", "HasHeaderGroup", "HasSecondaryHeaderGroup", "HeaderHidden", "BodyHidden", "SelectionDisabled", "SingleSelection", "RowClassAssigner", "OrderByColumn", "MultipleOrderingDirectives", "HiddenColumns", "ColumnsOrdering", "SearchView", "SelectAll", "UseArrayModePaging", "DynamicRowColumnsDefinition", "DynamicOperations", "Hierarchy", "ParentKey", "OwnKey", "StartsExpanded", "SavePreferences", "DefaultAlignment", "PagingStyle", "RowGroupingPagingStyle", "ItemSourceProperty", "UseSelectionCache", "ShowItemGroupsColumns", "Editable", "RangeSelection", "SearchThrottle", "ArraymodeItemsPerPage"], outputs: ["onOrderChanged", "onSearchRequest", "onSelectionChanged", "onRemoval", "onAbortRemoval", "onModelChange", "onOpenContextMenu", "onCornerAction", "onDynamicOperation"] }, { kind: "component", type: i9$1.EsFormInputComponent, selector: "form-input", inputs: ["minlength", "maxlength", "pattern", "Password"], outputs: ["onSuffixAction", "onPrefixAction"] }, { kind: "component", type: i9$1.EsFormCheckboxComponent, selector: "form-checkbox", inputs: ["SliderMode"] }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }], viewProviders: [{ provide: LocalizationService, useClass: AdmEnqLoc }] }); }
1146
+ }
1147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmEnqComponent, decorators: [{
1148
+ type: Component,
1149
+ args: [{ selector: "adm_enq", viewProviders: [{ provide: LocalizationService, useClass: AdmEnqLoc }], standalone: false, 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\">{{'Ricerca Lock Applicativi' | localize: lc}}</span>\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <form role=\"form\">\r\n <div class=\"col-md-12 row app-first-filter-line\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"locksView.filtersid\" name=\"filtersid\" [Placeholder]=\"'SID'\"></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 [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"locksView.filterlock\" name=\"filterlock\" [Placeholder]=\"'Nome' | localize: lc\"></form-input>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\" style=\"display: flex; height: 38px;\">\r\n <form-checkbox [FormLayout]=\"false\" [SliderMode]=\"true\" [Validation]=\"false\" [(ngModel)]=\"locksView.filterglobal\" name=\"filterglobal\"></form-checkbox>&nbsp;\r\n <span class=\"app-pointer app-padding-top-5 app-padding-left-5\" (click)=\"locksView.filterglobal = !locksView.filterglobal\">{{'Globale' | localize: lc}}</span>\r\n </div>\r\n <button 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 class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!locksView\"><em>{{'Carico i Lock Applicativi' | localize: lc}}...</em></p>\r\n <div *ngIf=\"locksView\">\r\n <es-table [(ngModel)]=\"locksView\" [AutoUpdate]=\"true\" [OrderByColumn]=\"true\" (onSearchRequest)=\"sendSearch($event);\"\r\n [ExportFileName]=\"'Application Locks.csv'\" [ExportFunction]=\"prepareExport.bind(this)\"></es-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
1150
+ }], ctorParameters: () => [{ type: i1.LocalizationService }, { type: i3.PreferencesService }, { type: i1$1.ExportService }, { type: i1$1.InterComService }, { type: i4.ActivatedRoute }, { type: i5.Location }, { type: AdminModuleBaseService }, { type: undefined, decorators: [{
1151
+ type: Inject,
1152
+ args: [ADM_MODULE_PATH]
1153
+ }] }] });
1154
+
1155
+ class MetricsView extends AppSearch {
1156
+ constructor() { super(); }
1157
+ }
1158
+
1159
+ class AdmMetricsLoc extends LocalizationService {
1160
+ constructor(injector) {
1161
+ super(injector);
1162
+ super.set("it->en", "Metriche di Sistema", ["System Metrics"]);
1163
+ super.set("it->en", "Cod. Sessione", ["Session ID"]);
1164
+ super.set("it->en", "Seriale Sessione", ["Session Serial"]);
1165
+ super.set("it->en", "Filtra Metriche...", ["Filter Metrics..."]);
1166
+ super.set("it->en", "Carico i Dati", ["Loading Data"]);
1167
+ super.set("it->en", "Aggiorna ogni", ["Update every"]);
1168
+ super.set("it->en", "secondo/i", ["second/s"]);
1169
+ super.set("it->en", "Istanza Metriche", ["Metrics Instance"]);
1170
+ }
1171
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmMetricsLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
1172
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmMetricsLoc }); }
1173
+ }
1174
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmMetricsLoc, decorators: [{
1175
+ type: Injectable
1176
+ }], ctorParameters: () => [{ type: i0.Injector }] });
1177
+
1178
+ // Angular
1179
+ class AdmMetricsComponent {
1180
+ constructor(dateExts, lc, localStorage, location, intercom, route, adms, mod) {
1181
+ this.dateExts = dateExts;
1182
+ this.lc = lc;
1183
+ this.localStorage = localStorage;
1184
+ this.location = location;
1185
+ this.intercom = intercom;
1186
+ this.route = route;
1187
+ this.adms = adms;
1188
+ this.mod = mod;
1189
+ this.MetricsChartCache = {};
1190
+ this.searchView = new MetricsView();
1191
+ this.autoUpdate = false;
1192
+ this.seconds = "5";
1193
+ this.Instances = [];
1194
+ this.selectedInstance = "";
1195
+ this.instanceRequired = false;
1196
+ this.metricsToShow = [];
1197
+ this.be = route.snapshot.params["be"] || "";
1198
+ this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data["title"]) });
1199
+ }
1200
+ ngOnInit() {
1201
+ this.storageSub = this.route.queryParams.subscribe(params => {
1202
+ this.Init(params["ignoreStorage"]);
1203
+ });
1204
+ }
1205
+ Init(ignoreStore) {
1206
+ this.doInit(ignoreStore);
1207
+ }
1208
+ async dateChanged() {
1209
+ // Pulizia di tutti i parametri di ricerca dipendenti dalle date
1210
+ this.metricsToShow = [];
1211
+ this.Metrics = [];
1212
+ this.instanceRequired = false;
1213
+ this.Instances = [];
1214
+ this.selectedInstance = "";
1215
+ this.searchView.filtermetrics = [];
1216
+ this.Metrics = await this.adms.getMetricsList(this.be, this.searchView.filterfrom || "", this.searchView.filterto || "");
1217
+ }
1218
+ async doInit(ignoreStorage) {
1219
+ let item = await this.localStorage.getItem("HotSearchMetrics").toPromise();
1220
+ if (!ignoreStorage && item) {
1221
+ this.init(item);
1222
+ }
1223
+ else {
1224
+ this.init(null);
1225
+ this.location.replaceState(`/pages/${this.mod}/metrics`);
1226
+ this.route.snapshot.queryParams = [];
1227
+ await this.localStorage.removeItem("HotSearchMetrics").toPromise();
1228
+ }
1229
+ }
1230
+ init(HotPotato) {
1231
+ if (HotPotato) {
1232
+ this.searchView = HotPotato;
1233
+ this.POSTGetItems(this.searchView, false);
1234
+ }
1235
+ else {
1236
+ this.searchView = new MetricsView();
1237
+ this.sendSearch();
1238
+ }
1239
+ this.dateChanged();
1240
+ }
1241
+ ngOnDestroy() {
1242
+ if (this.storageSub)
1243
+ this.storageSub.unsubscribe();
1244
+ }
1245
+ sendSearch(resetPage = true, update = false, searchViewOverride = null) {
1246
+ if (!update)
1247
+ this.MetricsChartCache = {};
1248
+ this.searchView.searchinprogress = true;
1249
+ // Questa ricerca prende i nomi distinct delle metriche quindi devo prendere tutto per forza
1250
+ this.searchView.itemsperpageoverride = 999999;
1251
+ if (resetPage)
1252
+ this.searchView.page = 1;
1253
+ this.POSTGetItems(searchViewOverride ?? this.searchView, update);
1254
+ }
1255
+ async POSTGetItems(data, update) {
1256
+ data.filterrealtime = update ? data.filterrealtime : !(!!data.filterfrom || !!data.filterto);
1257
+ let res = await this.adms.getMetrics(this.be, data);
1258
+ //Se sono in modalità di update non devo toccare la searchView attuale se non per il searchinprogress che viene messo dall'es table
1259
+ if (!update) {
1260
+ this.selectedInstance = "";
1261
+ this.metricsToShow = [];
1262
+ this.searchView = res;
1263
+ this.searchView.items.forEach(m => {
1264
+ if (m.instance && !this.Instances.find(t => t.id == m.instance))
1265
+ this.Instances.push(new KeyValue(m.instance, m.instance));
1266
+ });
1267
+ this.instanceRequired = this.Instances.length > 1;
1268
+ if (this.Instances.length == 1) {
1269
+ this.selectedInstance = this.Instances[0].id;
1270
+ this.instanceSelected();
1271
+ }
1272
+ else
1273
+ this.instanceSelected(true);
1274
+ this.localStorage.setItem("HotSearchMetrics", this.searchView).subscribe();
1275
+ }
1276
+ else {
1277
+ // Per ogni grafico di ogni metrica aggiungo tutti i valori che sono DOPO all'ultimo ts registrato per quel grafico
1278
+ res.items.forEach(m => {
1279
+ m.values.forEach(c => {
1280
+ let refm = this.MetricsChartCache[this.metricKey(m, c)];
1281
+ if (refm) {
1282
+ c.series.forEach(s => { s.values = s.values.filter(v => this.dateExts.getDateConvertion(v.d).isAfter(refm.lastTs)); });
1283
+ if (c.series.some(t => t.values.length > 0)) {
1284
+ refm.lastTs = c.series.map(t => dayjs.max(t.values.map(v => this.dateExts.getDateConvertion(v.d))))[0];
1285
+ refm.chart.addData(c);
1286
+ }
1287
+ }
1288
+ });
1289
+ });
1290
+ }
1291
+ this.searchView.searchinprogress = false;
1292
+ }
1293
+ instanceSelected(allowNull = false) {
1294
+ if (!this.selectedInstance && !allowNull)
1295
+ return;
1296
+ this.metricsToShow = this.searchView.items.filter(t => !this.selectedInstance || (t.instance == this.selectedInstance));
1297
+ }
1298
+ linkChartToMetric(metric, metricChart, chartComp) {
1299
+ 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] };
1300
+ }
1301
+ metricKey(metric, value) {
1302
+ return metric.name + " - " + value.xtitle + (metric.instance ? " - " + metric.instance : "");
1303
+ }
1304
+ autoUpdateChanged() {
1305
+ if (!/^[1-9]\d*$/.test(this.seconds))
1306
+ this.seconds = '10';
1307
+ const secondsInMs = parseInt(this.seconds, null) * 1000;
1308
+ if (this.autoUpdate) {
1309
+ this.sendSearch(false, true);
1310
+ this.updateTimer = setInterval(() => { this.sendSearch(false, true); }, secondsInMs);
1311
+ }
1312
+ else
1313
+ clearInterval(this.updateTimer);
1314
+ }
1315
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmMetricsComponent, deps: [{ token: i1$1.DateService }, { token: i1.LocalizationService }, { token: i3.PreferencesService }, { token: i5.Location }, { token: i1$1.InterComService }, { token: i4.ActivatedRoute }, { token: AdminModuleBaseService }, { token: ADM_MODULE_PATH }], target: i0.ɵɵFactoryTarget.Component }); }
1316
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AdmMetricsComponent, isStandalone: false, selector: "metrics_search", providers: [{ provide: LocalizationService, useClass: AdmMetricsLoc }], ngImport: i0, 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 {{'Metriche di Sistema' | 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]=\"'Da' | 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]=\"'A' | 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]=\"'Cod. Sessione' | 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]=\"'Seriale Sessione' | 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\" [Placeholder]=\"'Filtra Metriche...' | 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 {{'Aggiorna ogni' | localize: lc}}&nbsp;<input [readonly]=\"autoUpdate\" maxlength=\"3\" class=\"form-control app-updevery-input\" type=\"text\" [(ngModel)]=\"seconds\" name=\"seconds\" />&nbsp;{{'secondo/i' | 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\" name=\"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>{{'Carico i Dati' | localize: lc}}</em></p>\r\n <div *ngIf=\"searchView && instanceRequired\">\r\n <form-select [Validation]=\"false\" [Label]=\"'Istanza Metriche' | 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>", dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i9$1.EsFormInputComponent, selector: "form-input", inputs: ["minlength", "maxlength", "pattern", "Password"], outputs: ["onSuffixAction", "onPrefixAction"] }, { kind: "component", type: i9$1.EsFormSelectComponent, selector: "form-select" }, { kind: "component", type: i9$1.EsFormDateTimeComponent, selector: "form-datetime" }, { kind: "component", type: i9$1.EsFormMultiselectComponent, selector: "form-multiselect", inputs: ["display", "InOutFormat", "FloatingLabel"] }, { kind: "component", type: i3$1.EsLineChartComponent, selector: "es-line-chart", inputs: ["Data", "DataArray", "Step", "DataGroupBucketSize", "DataGroupingThreshold", "StrokeSize", "AllowGaps", "MergeDatasets", "FinalInstants", "Min", "Max", "Fill", "Stacked"] }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }] }); }
1317
+ }
1318
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmMetricsComponent, decorators: [{
1319
+ type: Component,
1320
+ args: [{ selector: "metrics_search", providers: [{ provide: LocalizationService, useClass: AdmMetricsLoc }], standalone: false, 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 {{'Metriche di Sistema' | 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]=\"'Da' | 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]=\"'A' | 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]=\"'Cod. Sessione' | 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]=\"'Seriale Sessione' | 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\" [Placeholder]=\"'Filtra Metriche...' | 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 {{'Aggiorna ogni' | localize: lc}}&nbsp;<input [readonly]=\"autoUpdate\" maxlength=\"3\" class=\"form-control app-updevery-input\" type=\"text\" [(ngModel)]=\"seconds\" name=\"seconds\" />&nbsp;{{'secondo/i' | 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\" name=\"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>{{'Carico i Dati' | localize: lc}}</em></p>\r\n <div *ngIf=\"searchView && instanceRequired\">\r\n <form-select [Validation]=\"false\" [Label]=\"'Istanza Metriche' | 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>" }]
1321
+ }], ctorParameters: () => [{ type: i1$1.DateService }, { type: i1.LocalizationService }, { type: i3.PreferencesService }, { type: i5.Location }, { type: i1$1.InterComService }, { type: i4.ActivatedRoute }, { type: AdminModuleBaseService }, { type: undefined, decorators: [{
1322
+ type: Inject,
1323
+ args: [ADM_MODULE_PATH]
1324
+ }] }] });
1325
+
1326
+ class AdmLogsLoc extends LocalizationService {
1327
+ constructor(injector) {
1328
+ super(injector);
1329
+ super.set("it->en", "Log del Server", ["Server Logs"]);
1330
+ }
1331
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmLogsLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
1332
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmLogsLoc }); }
1333
+ }
1334
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmLogsLoc, decorators: [{
1335
+ type: Injectable
1336
+ }], ctorParameters: () => [{ type: i0.Injector }] });
1337
+
1338
+ // Angular
1339
+ class AdmLogsComponent {
1340
+ constructor(intercom, lc, route, adms) {
1341
+ this.intercom = intercom;
1342
+ this.lc = lc;
1343
+ this.route = route;
1344
+ this.adms = adms;
1345
+ this.filterfrom = "";
1346
+ this.filterto = "";
1347
+ this.be = route.snapshot.params["be"] || "";
1348
+ this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data["title"]) });
1349
+ }
1350
+ async ngOnInit() {
1351
+ await this.sendSearch();
1352
+ }
1353
+ async sendSearch() {
1354
+ this.searchinprogress = true;
1355
+ this.Log = await this.adms.getServerLogs(this.be, this.filterfrom, this.filterto);
1356
+ this.searchinprogress = false;
1357
+ }
1358
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmLogsComponent, deps: [{ token: i1$1.InterComService }, { token: i1.LocalizationService }, { token: i4.ActivatedRoute }, { token: AdminModuleBaseService }], target: i0.ɵɵFactoryTarget.Component }); }
1359
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AdmLogsComponent, isStandalone: false, selector: "adm_logs", ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col-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)]=\"filterfrom\" name=\"filterfrom\" [Placeholder]=\"'Da'\"></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)]=\"filterto\" name=\"filterto\" [Placeholder]=\"'A'\"></form-date>\r\n </div>\r\n <button [disabled]=\"searchinprogress\" class=\"input-group-addon btn app-btn-search app-margin-top-20 app-margin-right-5\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n </div>\r\n </form>\r\n </div>\r\n <p *ngIf=\"Log\" class=\"app-whitespace-prewrap\" [innerHTML]=\"Log\"></p>\r\n\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i9$1.EsFormDateComponent, selector: "form-date", inputs: ["InOutFormat", "FloatingLabel"] }], viewProviders: [{ provide: LocalizationService, useClass: AdmLogsLoc }] }); }
1360
+ }
1361
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmLogsComponent, decorators: [{
1362
+ type: Component,
1363
+ args: [{ selector: "adm_logs", viewProviders: [{ provide: LocalizationService, useClass: AdmLogsLoc }], standalone: false, template: "<div class=\"row\">\r\n <div class=\"col-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)]=\"filterfrom\" name=\"filterfrom\" [Placeholder]=\"'Da'\"></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)]=\"filterto\" name=\"filterto\" [Placeholder]=\"'A'\"></form-date>\r\n </div>\r\n <button [disabled]=\"searchinprogress\" class=\"input-group-addon btn app-btn-search app-margin-top-20 app-margin-right-5\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n </div>\r\n </form>\r\n </div>\r\n <p *ngIf=\"Log\" class=\"app-whitespace-prewrap\" [innerHTML]=\"Log\"></p>\r\n\r\n</div>" }]
1364
+ }], ctorParameters: () => [{ type: i1$1.InterComService }, { type: i1.LocalizationService }, { type: i4.ActivatedRoute }, { type: AdminModuleBaseService }] });
1365
+
1366
+ class DynamicViewsView extends AppSearch {
1367
+ constructor() { super(); }
1368
+ }
1369
+
1370
+ class AdmDynamicViewsLoc extends LocalizationService {
1371
+ constructor(injector) {
1372
+ super(injector);
1373
+ super.set("it->en", "Ricerca Viste Dinamiche Applicative", ["Search Application Dynamic Views"]);
1374
+ super.set("it->en", "Nome", ["Name"]);
1375
+ super.set("it->en", "Carico le Viste Dinamiche Applicative", ["Loading Application Dynamic Views"]);
1376
+ super.set("it->en", "Il nome della vista è obbligatorio per le operazioni di ricerca", ["View Name is mandatory for search operations"]);
1377
+ super.set("it->en", "Nessun elemento trovato per la vista dinamica", ["No element found for Dynamic View"]);
1378
+ }
1379
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmDynamicViewsLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
1380
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmDynamicViewsLoc }); }
1381
+ }
1382
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmDynamicViewsLoc, decorators: [{
1383
+ type: Injectable
1384
+ }], ctorParameters: () => [{ type: i0.Injector }] });
1385
+
1386
+ // Angular
1387
+ class AdmDynamicViewsComponent {
1388
+ constructor(lc, intercom, localStorage, route, location, adms, mod) {
1389
+ this.lc = lc;
1390
+ this.intercom = intercom;
1391
+ this.localStorage = localStorage;
1392
+ this.route = route;
1393
+ this.location = location;
1394
+ this.adms = adms;
1395
+ this.mod = mod;
1396
+ this.searchView = new DynamicViewsView();
1397
+ this.Names = [];
1398
+ this.badSearch = false;
1399
+ this.currentName = "";
1400
+ // Staccato dalla view perché deve essere distrutta e ricreata di continuo
1401
+ this.filterName = "";
1402
+ this.be = route.snapshot.params["be"] || "";
1403
+ this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data["title"]) });
1404
+ }
1405
+ async ngOnInit() {
1406
+ this.Names = await this.adms.getDynamicViews(this.be);
1407
+ this.storageSub = this.route.queryParams.subscribe(params => { this.Init(params["ignoreStorage"]); });
1408
+ }
1409
+ ngOnDestroy() {
1410
+ if (this.storageSub)
1411
+ this.storageSub.unsubscribe();
1412
+ }
1413
+ async Init(ignoreStorage) {
1414
+ let item = await this.localStorage.getItem("HotDinamitato").toPromise();
1415
+ if (!ignoreStorage && item) {
1416
+ this.init(item);
1417
+ }
1418
+ else {
1419
+ this.init(null);
1420
+ this.location.replaceState(`/pages/${this.mod}/serverviews`);
1421
+ this.route.snapshot.queryParams = [];
1422
+ await this.localStorage.removeItem("HotDinamitato").toPromise();
1423
+ }
1424
+ }
1425
+ init(HotPotato) {
1426
+ //Se ho la HotPotato vuol dire che sono appena tornato dall'edit/nuovo. Rifaccio la ricerca in base ai filtri precedenti
1427
+ //Altirmenti genero il modello nuovo normalmente
1428
+ if (HotPotato) {
1429
+ this.searchView = HotPotato;
1430
+ this.POSTGetItems();
1431
+ }
1432
+ else {
1433
+ this.searchView = new DynamicViewsView();
1434
+ this.sendSearch();
1435
+ }
1436
+ }
1437
+ sendSearch(resetPage = true) {
1438
+ this.searchView.searchinprogress = true;
1439
+ if (resetPage)
1440
+ this.searchView.page = 1;
1441
+ this.searchView.filtername = this.filterName;
1442
+ this.POSTGetItems();
1443
+ }
1444
+ async prepareExportDynamicView(callback) {
1445
+ var view = JSON.parse(JSON.stringify(this.searchView));
1446
+ view.page = 1;
1447
+ view.itemsperpageoverride = 9999999;
1448
+ let tmp = await this.adms.getDynamicViewData(this.be, view);
1449
+ callback(tmp.items, GenericItem);
1450
+ }
1451
+ async POSTGetItems() {
1452
+ if (!this.searchView.filtername) {
1453
+ this.badSearch = true;
1454
+ AppSearch.reset(this.searchView);
1455
+ return;
1456
+ }
1457
+ else
1458
+ this.badSearch = false;
1459
+ // Per force-resettare l'estable
1460
+ if (this.currentName != this.searchView.filtername) {
1461
+ this.currentName = this.searchView.filtername;
1462
+ this.searchView = new DynamicViewsView();
1463
+ this.searchView.page = 1;
1464
+ this.searchView.filtername = this.currentName;
1465
+ }
1466
+ this.searchView = await this.adms.getDynamicViewData(this.be, this.searchView);
1467
+ this.searchView.searchinprogress = false;
1468
+ this.localStorage.setItem("HotDinamitato", this.searchView).subscribe();
1469
+ }
1470
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmDynamicViewsComponent, deps: [{ token: i1.LocalizationService }, { token: i1$1.InterComService }, { token: i3.PreferencesService }, { token: i4.ActivatedRoute }, { token: i5.Location }, { token: AdminModuleBaseService }, { token: ADM_MODULE_PATH }], target: i0.ɵɵFactoryTarget.Component }); }
1471
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AdmDynamicViewsComponent, isStandalone: false, selector: "adm_dynamic_views", ngImport: i0, 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\">{{'Ricerca Viste Dinamiche Applicative' | localize: lc}}</span>\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-select [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"filterName\" name=\"filtername\" [Source]=\"Names\" [Placeholder]=\"'Nome' | localize: lc\"></form-select>\r\n </div>\r\n <button 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 <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div *ngIf=\"badSearch\" class=\"card card-info app-white-text app-padding-10\">{{'Il nome della vista \u00E8 obbligatorio per le operazioni di ricerca' | localize: lc}}</div>\r\n <ng-container *ngIf=\"!badSearch\">\r\n <p *ngIf=\"!searchView\"><em>{{'Carico le Viste Dinamiche Applicative' | localize: lc}}...</em></p>\r\n <div *ngIf=\"searchView && searchView.items.length > 0\">\r\n <es-table [(ngModel)]=\"searchView\" [AutoUpdate]=\"true\" [ExportFunction]=\"prepareExportDynamicView.bind(this)\" [Export]=\"true\" [OrderByColumn]=\"true\" (onSearchRequest)=\"sendSearch($event);\"></es-table>\r\n </div>\r\n <div *ngIf=\"searchView && searchView.items.length == 0 && !searchView.searchinprogress\" class=\"card card-info app-white-text app-padding-10\">\r\n {{'Nessun elemento trovato per la vista dinamica' | localize: lc}}&nbsp;<strong>{{searchView.filtername}}</strong>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i9.EsTableComponent, selector: "es-table", inputs: ["EsThTdProvider", "CornerMenuOptions", "ColumnsResizable", "ColumnsPinnable", "AutoUpdate", "Height", "EmptySpaceBackgroundColor", "EsTableHandledSearch", "MaxHeight", "ContainerClass", "XLSXExport", "CSVExport", "AllSearch", "HighCellDensity", "Selection", "ShowLoadingOnBootstrap", "Removal", "RemovalCondition", "Export", "ShiftClick", "CountLabel", "HidePaging", "HidePagingCount", "HidePagingButtons", "ContextMenu", "ExportFileName", "TableClass", "ExportFunction", "ExportOnlyVisibleColumns", "HasHeaderGroup", "HasSecondaryHeaderGroup", "HeaderHidden", "BodyHidden", "SelectionDisabled", "SingleSelection", "RowClassAssigner", "OrderByColumn", "MultipleOrderingDirectives", "HiddenColumns", "ColumnsOrdering", "SearchView", "SelectAll", "UseArrayModePaging", "DynamicRowColumnsDefinition", "DynamicOperations", "Hierarchy", "ParentKey", "OwnKey", "StartsExpanded", "SavePreferences", "DefaultAlignment", "PagingStyle", "RowGroupingPagingStyle", "ItemSourceProperty", "UseSelectionCache", "ShowItemGroupsColumns", "Editable", "RangeSelection", "SearchThrottle", "ArraymodeItemsPerPage"], outputs: ["onOrderChanged", "onSearchRequest", "onSelectionChanged", "onRemoval", "onAbortRemoval", "onModelChange", "onOpenContextMenu", "onCornerAction", "onDynamicOperation"] }, { kind: "component", type: i9$1.EsFormSelectComponent, selector: "form-select" }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }], viewProviders: [{ provide: LocalizationService, useClass: AdmDynamicViewsLoc }] }); }
1472
+ }
1473
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmDynamicViewsComponent, decorators: [{
1474
+ type: Component,
1475
+ args: [{ selector: "adm_dynamic_views", viewProviders: [{ provide: LocalizationService, useClass: AdmDynamicViewsLoc }], standalone: false, 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\">{{'Ricerca Viste Dinamiche Applicative' | localize: lc}}</span>\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-select [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"filterName\" name=\"filtername\" [Source]=\"Names\" [Placeholder]=\"'Nome' | localize: lc\"></form-select>\r\n </div>\r\n <button 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 <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div *ngIf=\"badSearch\" class=\"card card-info app-white-text app-padding-10\">{{'Il nome della vista \u00E8 obbligatorio per le operazioni di ricerca' | localize: lc}}</div>\r\n <ng-container *ngIf=\"!badSearch\">\r\n <p *ngIf=\"!searchView\"><em>{{'Carico le Viste Dinamiche Applicative' | localize: lc}}...</em></p>\r\n <div *ngIf=\"searchView && searchView.items.length > 0\">\r\n <es-table [(ngModel)]=\"searchView\" [AutoUpdate]=\"true\" [ExportFunction]=\"prepareExportDynamicView.bind(this)\" [Export]=\"true\" [OrderByColumn]=\"true\" (onSearchRequest)=\"sendSearch($event);\"></es-table>\r\n </div>\r\n <div *ngIf=\"searchView && searchView.items.length == 0 && !searchView.searchinprogress\" class=\"card card-info app-white-text app-padding-10\">\r\n {{'Nessun elemento trovato per la vista dinamica' | localize: lc}}&nbsp;<strong>{{searchView.filtername}}</strong>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
1476
+ }], ctorParameters: () => [{ type: i1.LocalizationService }, { type: i1$1.InterComService }, { type: i3.PreferencesService }, { type: i4.ActivatedRoute }, { type: i5.Location }, { type: AdminModuleBaseService }, { type: undefined, decorators: [{
1477
+ type: Inject,
1478
+ args: [ADM_MODULE_PATH]
1479
+ }] }] });
1480
+
1481
+ class QueryView extends AppSearch {
1482
+ constructor() { super(); }
1483
+ }
1484
+
1485
+ class MtdQueryLoc extends LocalizationService {
1486
+ constructor(injector) {
1487
+ super(injector);
1488
+ super.set("it->en", "Esecuzione Query Metadati", ["Metadata Query Execution"]);
1489
+ super.set("it->en", "Query", ["Query"]);
1490
+ super.set("it->en", "Carico i Risultati", ["Loading Results"]);
1491
+ }
1492
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MtdQueryLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
1493
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MtdQueryLoc }); }
1494
+ }
1495
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MtdQueryLoc, decorators: [{
1496
+ type: Injectable
1497
+ }], ctorParameters: () => [{ type: i0.Injector }] });
1498
+
1499
+ // Angular
1500
+ class MtdQueryComponent {
1501
+ constructor(lc, localStorage, expExts, intercom, route, location, adms, mod) {
1502
+ this.lc = lc;
1503
+ this.localStorage = localStorage;
1504
+ this.expExts = expExts;
1505
+ this.intercom = intercom;
1506
+ this.route = route;
1507
+ this.location = location;
1508
+ this.adms = adms;
1509
+ this.mod = mod;
1510
+ this.searchView = new QueryView();
1511
+ this.searching = false;
1512
+ this.be = route.snapshot.params["be"] || "";
1513
+ this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data["title"]) });
1514
+ }
1515
+ ngOnInit() {
1516
+ this.storageSub = this.route.queryParams.subscribe(params => { this.Init(params["ignoreStorage"]); });
1517
+ }
1518
+ ngOnDestroy() {
1519
+ if (this.storageSub)
1520
+ this.storageSub.unsubscribe();
1521
+ }
1522
+ async Init(ignoreStorage) {
1523
+ let item = await this.localStorage.getItem("HotQuery").toPromise();
1524
+ if (!ignoreStorage && item) {
1525
+ this.init(item);
1526
+ }
1527
+ else {
1528
+ this.init(null);
1529
+ this.location.replaceState(`/pages/${this.mod}/metadataquery`);
1530
+ this.route.snapshot.queryParams = [];
1531
+ await this.localStorage.removeItem("HotQuery").toPromise();
1532
+ }
1533
+ }
1534
+ init(HotPotato) {
1535
+ if (HotPotato) {
1536
+ this.searchView = HotPotato;
1537
+ this.POSTGetSearch(this.searchView);
1538
+ }
1539
+ else {
1540
+ this.searchView = new QueryView();
1541
+ this.sendSearch();
1542
+ }
1543
+ }
1544
+ sendSearch(resetPage = true) {
1545
+ this.searching = true;
1546
+ if (resetPage)
1547
+ this.searchView.page = 1;
1548
+ if (!this.searchView.filterquery)
1549
+ return;
1550
+ this.POSTGetSearch(this.searchView);
1551
+ }
1552
+ async POSTGetSearch(data) {
1553
+ this.searchView = await this.adms.getServerQuery(this.be, data);
1554
+ this.searchView.searchinprogress = false;
1555
+ this.localStorage.setItem("HotEnqueue", this.searchView).subscribe();
1556
+ this.searching = false;
1557
+ }
1558
+ async prepareExport(callback) {
1559
+ var view = JSON.parse(JSON.stringify(this.searchView));
1560
+ view.page = 1;
1561
+ view.itemsperpageoverride = 9999999;
1562
+ let tmp = await this.adms.getServerLocks(this.be, view);
1563
+ callback(tmp.items, GenericItem);
1564
+ }
1565
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MtdQueryComponent, deps: [{ token: i1.LocalizationService }, { token: i3.PreferencesService }, { token: i1$1.ExportService }, { token: i1$1.InterComService }, { token: i4.ActivatedRoute }, { token: i5.Location }, { token: AdminModuleBaseService }, { token: ADM_MODULE_PATH }], target: i0.ɵɵFactoryTarget.Component }); }
1566
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: MtdQueryComponent, isStandalone: false, selector: "adm_mtd_query", ngImport: i0, 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\">{{'Esecuzione Query Metadati' | localize: lc}}</span>\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <form role=\"form\">\r\n <div class=\"col-md-12 row app-first-filter-line\">\r\n <div class=\"col-xl-11 col-lg-11 col-md-11 app-filter-wrapper\">\r\n <form-textarea rows=\"3\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterquery\" name=\"filterquery\" [Placeholder]=\"'Query'\"></form-textarea>\r\n </div>\r\n <button 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 class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Carico i Risultati' | localize: lc}}...</em></p>\r\n <div *ngIf=\"searchView && !searching\">\r\n <es-table [(ngModel)]=\"searchView\" [AutoUpdate]=\"true\" [OrderByColumn]=\"true\" (onSearchRequest)=\"sendSearch($event);\" [ExportFileName]=\"'Results.csv'\" [ExportFunction]=\"prepareExport.bind(this)\"></es-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i9.EsTableComponent, selector: "es-table", inputs: ["EsThTdProvider", "CornerMenuOptions", "ColumnsResizable", "ColumnsPinnable", "AutoUpdate", "Height", "EmptySpaceBackgroundColor", "EsTableHandledSearch", "MaxHeight", "ContainerClass", "XLSXExport", "CSVExport", "AllSearch", "HighCellDensity", "Selection", "ShowLoadingOnBootstrap", "Removal", "RemovalCondition", "Export", "ShiftClick", "CountLabel", "HidePaging", "HidePagingCount", "HidePagingButtons", "ContextMenu", "ExportFileName", "TableClass", "ExportFunction", "ExportOnlyVisibleColumns", "HasHeaderGroup", "HasSecondaryHeaderGroup", "HeaderHidden", "BodyHidden", "SelectionDisabled", "SingleSelection", "RowClassAssigner", "OrderByColumn", "MultipleOrderingDirectives", "HiddenColumns", "ColumnsOrdering", "SearchView", "SelectAll", "UseArrayModePaging", "DynamicRowColumnsDefinition", "DynamicOperations", "Hierarchy", "ParentKey", "OwnKey", "StartsExpanded", "SavePreferences", "DefaultAlignment", "PagingStyle", "RowGroupingPagingStyle", "ItemSourceProperty", "UseSelectionCache", "ShowItemGroupsColumns", "Editable", "RangeSelection", "SearchThrottle", "ArraymodeItemsPerPage"], outputs: ["onOrderChanged", "onSearchRequest", "onSelectionChanged", "onRemoval", "onAbortRemoval", "onModelChange", "onOpenContextMenu", "onCornerAction", "onDynamicOperation"] }, { kind: "component", type: i9$1.EsFormTextareaComponent, selector: "form-textarea", inputs: ["rows", "minlength", "maxlength"] }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }], viewProviders: [{ provide: LocalizationService, useClass: MtdQueryLoc }] }); }
1567
+ }
1568
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MtdQueryComponent, decorators: [{
1569
+ type: Component,
1570
+ args: [{ selector: "adm_mtd_query", viewProviders: [{ provide: LocalizationService, useClass: MtdQueryLoc }], standalone: false, 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\">{{'Esecuzione Query Metadati' | localize: lc}}</span>\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <form role=\"form\">\r\n <div class=\"col-md-12 row app-first-filter-line\">\r\n <div class=\"col-xl-11 col-lg-11 col-md-11 app-filter-wrapper\">\r\n <form-textarea rows=\"3\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterquery\" name=\"filterquery\" [Placeholder]=\"'Query'\"></form-textarea>\r\n </div>\r\n <button 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 class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Carico i Risultati' | localize: lc}}...</em></p>\r\n <div *ngIf=\"searchView && !searching\">\r\n <es-table [(ngModel)]=\"searchView\" [AutoUpdate]=\"true\" [OrderByColumn]=\"true\" (onSearchRequest)=\"sendSearch($event);\" [ExportFileName]=\"'Results.csv'\" [ExportFunction]=\"prepareExport.bind(this)\"></es-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
1571
+ }], ctorParameters: () => [{ type: i1.LocalizationService }, { type: i3.PreferencesService }, { type: i1$1.ExportService }, { type: i1$1.InterComService }, { type: i4.ActivatedRoute }, { type: i5.Location }, { type: AdminModuleBaseService }, { type: undefined, decorators: [{
1572
+ type: Inject,
1573
+ args: [ADM_MODULE_PATH]
1574
+ }] }] });
1575
+
1576
+ // Angular
1577
+ class FormatTimePipe {
1578
+ constructor() { }
1579
+ transform(value) {
1580
+ return this.secondsToHms(value);
1581
+ }
1582
+ secondsToHms(d) {
1583
+ d = Number(d);
1584
+ var h = Math.floor(d / 3600);
1585
+ var m = Math.floor(d % 3600 / 60);
1586
+ var s = Math.floor(d % 3600 % 60);
1587
+ var hDisplay = h > 0 ? h + " h, " : "";
1588
+ var mDisplay = m > 0 ? m + " min, " : "";
1589
+ var sDisplay = s > 0 ? s + " sec" : "";
1590
+ return hDisplay + mDisplay + sDisplay;
1591
+ }
1592
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FormatTimePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1593
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: FormatTimePipe, isStandalone: true, name: "format_time" }); }
1594
+ }
1595
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FormatTimePipe, decorators: [{
1596
+ type: Pipe,
1597
+ args: [{ name: 'format_time' }]
1598
+ }], ctorParameters: () => [] });
1599
+
1600
+ /** Chiave di questo modulo, da utilizzare per i messaggi */
1601
+ const MK_ADM = "EsAdminModule";
1602
+ /** Messaggi gestiti da questo modulo */
1603
+ var AdmMessageTypes;
1604
+ (function (AdmMessageTypes) {
1605
+ AdmMessageTypes[AdmMessageTypes["Message"] = 0] = "Message";
1606
+ })(AdmMessageTypes || (AdmMessageTypes = {}));
1607
+
1608
+ // Angular
1609
+ class AdminModuleCommService {
1610
+ constructor(intercom) {
1611
+ this.intercom = intercom;
1612
+ }
1613
+ register() {
1614
+ this.intercom.register(MK_ADM);
1615
+ this.intercom.outbounds[MK_ADM].subscribe((t) => { this.handleOutbound(t.type, t.message); });
1616
+ }
1617
+ handleOutbound(type, message) {
1618
+ switch (type) {
1619
+ case AdmMessageTypes.Message:
1620
+ if (myconfig.DEBUG_MODE)
1621
+ console.log("@admin-module outbound message: " + message);
1622
+ break;
1623
+ }
1624
+ }
1625
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdminModuleCommService, deps: [{ token: i1$1.InterComService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1626
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdminModuleCommService }); }
1627
+ }
1628
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdminModuleCommService, decorators: [{
1629
+ type: Injectable
1630
+ }], ctorParameters: () => [{ type: i1$1.InterComService }] });
1631
+
1632
+ // Angular
1633
+ const routeConfig = [
1634
+ {
1635
+ path: "", children: [
1636
+ { path: "serverworkers/:be", component: AdmWrkComponent, data: { title: "Ricerca Processi Applicativi", internalNavigation: false } },
1637
+ { path: "profiler/:be", component: AdmProfilerComponent, data: { title: "Profiler del Server", internalNavigation: false } },
1638
+ { path: "topact/:be", component: AdmTopActivitiesComponent, data: { title: "Attività Principali", internalNavigation: false } },
1639
+ { path: "metrics/:be", component: AdmMetricsComponent, data: { title: "Metriche di Sistema", internalNavigation: false } },
1640
+ { path: "serverlogs/:be", component: AdmLogsComponent, data: { title: "Log del Server", internalNavigation: false } },
1641
+ { path: "serveraudits/:be", component: AdmAuditsComponent, data: { title: "Ricerca Audit Applicativi", internalNavigation: false } },
1642
+ { path: "serverenqueues/:be", component: AdmEnqComponent, data: { title: "Ricerca Lock Applicativi", internalNavigation: false } },
1643
+ { path: "serverviews/:be", component: AdmDynamicViewsComponent, data: { title: "Ricerca Viste Dinamiche Applicative", internalNavigation: false } },
1644
+ { path: "metadataquery/:be", component: MtdQueryComponent, data: { title: "Ricerca Viste Dinamiche Applicative", internalNavigation: false } },
1645
+ { path: "serverworkers", component: AdmWrkComponent, data: { title: "Ricerca Processi Applicativi", internalNavigation: false } },
1646
+ { path: "profiler", component: AdmProfilerComponent, data: { title: "Profiler del Server", internalNavigation: false } },
1647
+ { path: "topact", component: AdmTopActivitiesComponent, data: { title: "Attività Principali", internalNavigation: false } },
1648
+ { path: "metrics", component: AdmMetricsComponent, data: { title: "Metriche di Sistema", internalNavigation: false } },
1649
+ { path: "serverlogs", component: AdmLogsComponent, data: { title: "Log del Server", internalNavigation: false } },
1650
+ { path: "serveraudits", component: AdmAuditsComponent, data: { title: "Ricerca Audit Applicativi", internalNavigation: false } },
1651
+ { path: "serverenqueues", component: AdmEnqComponent, data: { title: "Ricerca Lock Applicativi", internalNavigation: false } },
1652
+ { path: "serverviews", component: AdmDynamicViewsComponent, data: { title: "Ricerca Viste Dinamiche Applicative", internalNavigation: false } },
1653
+ { path: "metadataquery", component: MtdQueryComponent, data: { title: "Ricerca Viste Dinamiche Applicative", internalNavigation: false } }
1654
+ ]
1655
+ }
1656
+ ];
1657
+ const MODULES = [
1658
+ // Base
1659
+ CommonModule,
1660
+ FormsModule,
1661
+ // Material
1662
+ MatDatepickerModule,
1663
+ MatIconModule,
1664
+ MatInputModule,
1665
+ // Bootstrap
1666
+ ModalModule,
1667
+ TooltipModule,
1668
+ BsDropdownModule,
1669
+ // Esfaenza e componenti visuali
1670
+ ContextMenuModule,
1671
+ LocalizationModule,
1672
+ ExtensionsModule,
1673
+ EsTableModule,
1674
+ FormsAndValidationsModule,
1675
+ EsGertrudeModule,
1676
+ EsChartsModule,
1677
+ RouterModule.forChild(routeConfig),
1678
+ ];
1679
+ const COMPONENTS = [
1680
+ AdmWrkComponent,
1681
+ AdmProfilerComponent,
1682
+ AdmTopActivitiesComponent,
1683
+ AdmDynamicViewsComponent,
1684
+ AdmLogsComponent,
1685
+ AdmAuditsComponent,
1686
+ AdmEnqComponent,
1687
+ AdmMetricsComponent,
1688
+ NodeDetailComponent,
1689
+ MtdQueryComponent
1690
+ ];
1691
+ const PIPES = [
1692
+ FormatTimePipe
1693
+ ];
1694
+ class AdmModule {
1695
+ constructor(commService) {
1696
+ this.commService = commService;
1697
+ console.log("@esfaenza/admin-module: BOOTSTRAP");
1698
+ this.commService.register();
1699
+ }
1700
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmModule, deps: [{ token: AdminModuleCommService }], target: i0.ɵɵFactoryTarget.NgModule }); }
1701
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: AdmModule, declarations: [AdmWrkComponent,
1702
+ AdmProfilerComponent,
1703
+ AdmTopActivitiesComponent,
1704
+ AdmDynamicViewsComponent,
1705
+ AdmLogsComponent,
1706
+ AdmAuditsComponent,
1707
+ AdmEnqComponent,
1708
+ AdmMetricsComponent,
1709
+ NodeDetailComponent,
1710
+ MtdQueryComponent], imports: [
1711
+ // Base
1712
+ CommonModule,
1713
+ FormsModule,
1714
+ // Material
1715
+ MatDatepickerModule,
1716
+ MatIconModule,
1717
+ MatInputModule,
1718
+ // Bootstrap
1719
+ ModalModule,
1720
+ TooltipModule,
1721
+ BsDropdownModule,
1722
+ // Esfaenza e componenti visuali
1723
+ ContextMenuModule,
1724
+ LocalizationModule,
1725
+ ExtensionsModule,
1726
+ EsTableModule,
1727
+ FormsAndValidationsModule,
1728
+ EsGertrudeModule,
1729
+ EsChartsModule, i4.RouterModule, FormatTimePipe] }); }
1730
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmModule, providers: [
1731
+ AdminModuleCommService,
1732
+ { provide: ADM_CONVERSATIONS, useFactory: () => !!myconfig.TransactionTimeoutSeconds }
1733
+ ], imports: [MODULES] }); }
1734
+ }
1735
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AdmModule, decorators: [{
1736
+ type: NgModule,
1737
+ args: [{
1738
+ imports: [...MODULES, ...PIPES],
1739
+ declarations: [...COMPONENTS],
1740
+ providers: [
1741
+ AdminModuleCommService,
1742
+ { provide: ADM_CONVERSATIONS, useFactory: () => !!myconfig.TransactionTimeoutSeconds }
1743
+ ]
1744
+ }]
1745
+ }], ctorParameters: () => [{ type: AdminModuleCommService }] });
1746
+
1747
+ /*
1748
+ * Public API Surface of admin-module
1749
+ */
1750
+
1751
+ /**
1752
+ * Generated bundle index. Do not edit.
1753
+ */
1754
+
1755
+ export { ADM_CONVERSATIONS, ADM_MODULE_PATH, AdmMessageTypes, AdmModule, MK_ADM, routeConfig };
1756
+ //# sourceMappingURL=esfaenza-admin-module.mjs.map