@esfaenza/admin-module 13.1.2 → 13.1.5

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 (39) hide show
  1. package/esm2020/lib/admin-module-messages.mjs +8 -0
  2. package/esm2020/lib/admin-module.comms.service.mjs +29 -0
  3. package/esm2020/lib/admin-module.module.mjs +28 -7
  4. package/esm2020/lib/components/audits/adm_audits.component.loc.mjs +3 -1
  5. package/esm2020/lib/components/audits/adm_audits.component.mjs +17 -11
  6. package/esm2020/lib/components/enqueues/adm_enq.component.mjs +15 -14
  7. package/esm2020/lib/components/logs/adm_logs.component.loc.mjs +19 -0
  8. package/esm2020/lib/components/logs/adm_logs.component.mjs +15 -9
  9. package/esm2020/lib/components/metrics/metrics_search.component.mjs +14 -13
  10. package/esm2020/lib/components/profiler/adm_profiler.component.mjs +14 -13
  11. package/esm2020/lib/components/topact/topact_search.component.mjs +14 -14
  12. package/esm2020/lib/components/workers/adm_wrk.component.mjs +16 -15
  13. package/esm2020/lib/models/components/Audit.mjs +1 -1
  14. package/esm2020/lib/models/components/AuditsView.mjs +1 -1
  15. package/esm2020/lib/models/shared/Locale.mjs +1 -1
  16. package/esm2020/lib/tokens.mjs +2 -1
  17. package/esm2020/public-api.mjs +2 -2
  18. package/fesm2015/esfaenza-admin-module.mjs +133 -64
  19. package/fesm2015/esfaenza-admin-module.mjs.map +1 -1
  20. package/fesm2020/esfaenza-admin-module.mjs +131 -64
  21. package/fesm2020/esfaenza-admin-module.mjs.map +1 -1
  22. package/lib/admin-module-messages.d.ts +6 -0
  23. package/lib/admin-module.comms.service.d.ts +10 -0
  24. package/lib/admin-module.module.d.ts +3 -0
  25. package/lib/components/audits/adm_audits.component.d.ts +4 -3
  26. package/lib/components/enqueues/adm_enq.component.d.ts +3 -4
  27. package/lib/components/logs/adm_logs.component.d.ts +3 -3
  28. package/lib/components/logs/adm_logs.component.loc.d.ts +7 -0
  29. package/lib/components/metrics/metrics_search.component.d.ts +3 -4
  30. package/lib/components/profiler/adm_profiler.component.d.ts +3 -4
  31. package/lib/components/topact/topact_search.component.d.ts +3 -4
  32. package/lib/components/workers/adm_wrk.component.d.ts +3 -4
  33. package/lib/models/components/Audit.d.ts +2 -0
  34. package/lib/models/components/AuditsView.d.ts +2 -0
  35. package/lib/tokens.d.ts +1 -0
  36. package/package.json +2 -1
  37. package/public-api.d.ts +1 -1
  38. package/esm2020/lib/communications/base/BaseModuleCommunicationsConsumer.mjs +0 -3
  39. package/lib/communications/base/BaseModuleCommunicationsConsumer.d.ts +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-admin-module.mjs","sources":["../../../projects/admin-module/src/lib/models/components/AuditsView.ts","../../../projects/admin-module/src/lib/models/externals/Repository.ts","../../../projects/admin-module/src/lib/tokens.ts","../../../projects/admin-module/src/lib/components/audits/adm_audits.component.loc.ts","../../../projects/admin-module/src/lib/communications/base/BaseModuleCommunicationsConsumer.ts","../../../projects/admin-module/src/lib/components/audits/adm_audits.component.ts","../../../projects/admin-module/src/lib/components/audits/adm_audits.component.html","../../../projects/admin-module/src/lib/models/components/ProcessesView.ts","../../../projects/admin-module/src/lib/components/workers/adm_wrk.component.loc.ts","../../../projects/admin-module/src/lib/components/workers/adm_wrk.component.ts","../../../projects/admin-module/src/lib/components/workers/adm_wrk.component.html","../../../projects/admin-module/src/lib/models/shared/Locale.ts","../../../projects/admin-module/src/lib/models/components/ProfilerDataNode.loc.ts","../../../projects/admin-module/src/lib/models/components/ProfilerDataNode.ts","../../../projects/admin-module/src/lib/models/components/ProfilerDataNodesView.ts","../../../projects/admin-module/src/lib/components/profiler/adm_profiler.component.loc.ts","../../../projects/admin-module/src/lib/components/profiler/adm_profiler.component.ts","../../../projects/admin-module/src/lib/components/profiler/adm_profiler.component.html","../../../projects/admin-module/src/lib/models/components/TopActivitiesDataView.ts","../../../projects/admin-module/src/lib/components/topact/topact_search.component.loc.ts","../../../projects/admin-module/src/lib/components/topact/topact_search.component.ts","../../../projects/admin-module/src/lib/components/topact/topact_search.component.html","../../../projects/admin-module/src/lib/models/components/LocksView.ts","../../../projects/admin-module/src/lib/components/enqueues/adm_enq.component.loc.ts","../../../projects/admin-module/src/lib/components/enqueues/adm_enq.component.ts","../../../projects/admin-module/src/lib/components/enqueues/adm_enq.component.html","../../../projects/admin-module/src/lib/models/shared/KeyValue.ts","../../../projects/admin-module/src/lib/models/components/MetricsView.ts","../../../projects/admin-module/src/lib/components/metrics/metrics_search.component.loc.ts","../../../projects/admin-module/src/lib/components/metrics/metrics_search.component.ts","../../../projects/admin-module/src/lib/components/metrics/metrics_search.component.html","../../../projects/admin-module/src/lib/components/logs/adm_logs.component.ts","../../../projects/admin-module/src/lib/components/logs/adm_logs.component.html","../../../projects/admin-module/src/lib/admin-module.module.ts","../../../projects/admin-module/src/public-api.ts","../../../projects/admin-module/src/esfaenza-admin-module.ts"],"sourcesContent":["import { AppSearch } from \"@esfaenza/es-table\";\r\nimport { Audit } from \"./Audit\";\r\n\r\nexport class AuditsView extends AppSearch<Audit> {\r\n constructor() {\r\n super();\r\n this.filteraction = '';\r\n this.filterhttp = '';\r\n }\r\n\r\n filterda: string;\r\n filtera: string;\r\n filteruser: string;\r\n filterroute: string;\r\n filteraction: string;\r\n filterhttp: string;\r\n filterargs: string;\r\n filterobjid: string;\r\n filterobjtype: string;\r\n}","export const Repository = {\r\n GET_Adm_ChangeProcessConsumerGroup: \"/api/Adm/ChangeProcessConsumerGroup\",\r\n GET_Adm_ClearAllCaches: \"/api/Adm/ClearAllCaches\",\r\n GET_Adm_GetConsumerGroups: \"/api/Adm/GetConsumerGroups#cache\",\r\n GET_Adm_GetInfos: \"/api/Adm/GetInfos\",\r\n GET_Adm_GetMetrics: \"/api/Adm/GetMetrics\",\r\n POST_Adm_GetMetrics: \"/api/Adm/GetMetrics\",\r\n POST_Adm_GetProfilerDataNodes: \"/api/Adm/GetProfilerDataNodes\",\r\n POST_Adm_GetServerAudits: \"/api/Adm/GetServerAudits\",\r\n POST_Adm_GetServerLocks: \"/api/Adm/GetServerLocks\",\r\n GET_Adm_GetServerLogs: \"/api/Adm/GetServerLogs\",\r\n POST_Adm_GetServerWorkers: \"/api/Adm/GetServerWorkers\",\r\n POST_Adm_GetTopActivities: \"/api/Adm/GetTopActivities\",\r\n GET_Adm_GetWorkerStatus: \"/api/Adm/GetWorkerStatus\",\r\n GET_Adm_InvalidateServerSideCache: \"/api/Adm/InvalidateServerSideCache\",\r\n GET_Adm_KillProcess: \"/api/Adm/KillProcess\",\r\n GET_Adm_SetProcessTracing: \"/api/Adm/SetProcessTracing\",\r\n GET_Adm_StartWorker: \"/api/Adm/StartWorker\",\r\n GET_Adm_StopWorker: \"/api/Adm/StopWorker\"\r\n}","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport const ADM_LOCALE: InjectionToken<string> = new InjectionToken<string>('ADM_LOCALE');\r\nexport const ADM_BACKEND_URL: InjectionToken<string> = new InjectionToken<string>('ADM_BACKEND_URL');\r\nexport const ADM_MODULE_PATH: InjectionToken<string> = new InjectionToken<string>('ADM_MODULE_PATH');","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\nimport { ADM_LOCALE } from \"../../tokens\";\r\n\r\n@Injectable()\r\nexport class AdmAuditLoc extends LocalizationService {\r\n constructor(@Inject(ADM_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n\r\n super.set(\"en->it\", \"Search Application Audits\", [\"Ricerca Audit Applicativi\"]);\r\n super.set(\"en->it\", \"User\", [\"Utente\"]);\r\n super.set(\"en->it\", \"REST Call\", [\"Chiamata REST\"]);\r\n super.set(\"en->it\", \"Update\", [\"Aggiornamento\"]);\r\n super.set(\"en->it\", \"Route\", [\"Route\"]);\r\n super.set(\"en->it\", \"Action\", [\"Azione\"]);\r\n super.set(\"en->it\", \"HTTP Method\", [\"Metodo HTTP\"]);\r\n super.set(\"en->it\", \"Arguments\", [\"Argomenti\"]);\r\n super.set(\"en->it\", \"Object ID\", [\"ID Oggetto\"]);\r\n super.set(\"en->it\", \"Object Type\", [\"Tipo Oggetto\"]);\r\n super.set(\"en->it\", \"Object Data\", [\"Dati Oggetto\"]);\r\n super.set(\"en->it\", \"Loading Application Audits\", [\"Carico gli Audit dell'Applicazione\"]);\r\n super.set(\"en->it\", \"Date\", [\"Data\"]);\r\n super.set(\"en->it\", \"HTTP Response\", [\"Risposta HTTP\"]);\r\n super.set(\"en->it\", \"Application Error Code\", [\"Codice Errore Applicativo\"]);\r\n }\r\n}","export abstract class BaseModuleCommunicationsConsumer {\r\n public abstract handleNavigation(routeTitle: string, subNavigation: boolean);\r\n}","// Angular\r\nimport { Component, Inject } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { Location } from \"@angular/common\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PreferencesService } from \"@esfaenza/preferences\";\r\nimport { HTTPService } from \"@esfaenza/httpservice\";\r\n\r\n// Applicazione\r\nimport { BaseModuleCommunicationsConsumer } from \"../../communications/base/BaseModuleCommunicationsConsumer\";\r\nimport { AuditsView } from \"../../models/components/AuditsView\";\r\nimport { KeyValue } from \"../../models/shared/KeyValue\";\r\nimport { Repository } from \"../../models/externals/Repository\";\r\nimport { ADM_BACKEND_URL, ADM_MODULE_PATH } from \"../../tokens\";\r\n\r\n// Localizzazione\r\nimport { AdmAuditLoc } from \"./adm_audits.component.loc\";\r\n\r\n/**\r\n * Dichiarazione della variabile globale dayjs. L'onere di \"crearla\" è affidato all'applicazione che utilizza questa libreria, \r\n * che dovrà importare lo script globale di dayjs nella CLI\r\n */\r\n declare var dayjs: any;\r\n\r\n@Component({\r\n selector: \"adm_audits\",\r\n viewProviders: [{ provide: LocalizationService, useClass: AdmAuditLoc }],\r\n templateUrl: \"./adm_audits.component.html\"\r\n})\r\nexport class AdmAuditsComponent {\r\n\r\n public searchView: AuditsView = new AuditsView();\r\n public Actions: KeyValue[] = [];\r\n public HttpMethods: KeyValue[] = [];\r\n public searchInProgress: boolean = false;\r\n public storageSub: any;\r\n\r\n constructor(\r\n public lc: LocalizationService,\r\n private localStorage: PreferencesService,\r\n private _state: BaseModuleCommunicationsConsumer,\r\n private http: HTTPService,\r\n private route: ActivatedRoute,\r\n private location: Location,\r\n @Inject(ADM_BACKEND_URL) private backend: string,\r\n @Inject(ADM_MODULE_PATH) private mod: string) {\r\n\r\n this._state.handleNavigation(this.lc.loc(this.route.snapshot.data[\"title\"]), false);\r\n\r\n this.HttpMethods = [\r\n { id: \"GET\", description: \"GET\" },\r\n { id: \"POST\", description: \"POST\" },\r\n { id: \"PUT\", description: \"PUT\" },\r\n { id: \"PATCH\", description: \"PATCH\" },\r\n { id: \"DELETE\", description: \"DELETE\" }\r\n ];\r\n\r\n this.Actions = [\r\n { id: \"C\", description: this.lc.loc(\"REST Call\") },\r\n { id: \"U\", description: this.lc.loc(\"Update\") },\r\n { id: \"D\", description: this.lc.loc(\"Delete\") }\r\n ];\r\n }\r\n\r\n ngOnInit() {\r\n this.storageSub = this.route.queryParams.subscribe(params => { this.Init(params[\"ignoreStorage\"]); });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.storageSub)\r\n this.storageSub.unsubscribe();\r\n }\r\n\r\n async Init(ignoreStorage) {\r\n let item = await this.localStorage.getItem<AuditsView>(\"HotAudittato\").toPromise();\r\n if (!ignoreStorage && item) {\r\n this.init(item);\r\n } else {\r\n this.init(null);\r\n this.location.replaceState(`/pages/${this.mod}/serveraudits`);\r\n this.route.snapshot.queryParams = [];\r\n await this.localStorage.removeItem(\"HotAudittato\").toPromise();\r\n }\r\n }\r\n\r\n init(HotPotato: AuditsView) {\r\n //Se ho la HotPotato vuol dire che sono appena tornato dall'edit/nuovo. Rifaccio la ricerca in base ai filtri precedenti\r\n //Altirmenti genero il modello nuovo normalmente\r\n if (HotPotato) {\r\n this.searchView = HotPotato;\r\n this.POSTGetProcesses(this.backend + Repository[\"POST_Adm_GetServerAudits\"], this.searchView);\r\n }\r\n else {\r\n this.searchView = new AuditsView();\r\n this.searchView.filterda = dayjs().add(-1, \"month\").format(this.lc.token(\"getSmallDateFormat\"));\r\n this.searchView.filtera = dayjs().format(this.lc.token(\"getSmallDateFormat\"));\r\n this.sendSearch();\r\n }\r\n }\r\n\r\n sendSearch(resetPage: boolean = true) {\r\n this.searchInProgress = true;\r\n if (resetPage)\r\n this.searchView.page = 1;\r\n\r\n this.POSTGetProcesses(this.backend + Repository[\"POST_Adm_GetServerAudits\"], this.searchView);\r\n }\r\n\r\n POSTGetProcesses(url: string, data: AuditsView) {\r\n this.http.post<AuditsView>(url, data).subscribe(t => {\r\n this.searchView = t;\r\n this.searchInProgress = false;\r\n this.localStorage.setItem(\"HotAudittato\", this.searchView).subscribe();\r\n });\r\n }\r\n}","<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\">{{'Search Application Audits' | 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]=\"'From' | localize : lc\"></form-date>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtera\" name=\"filtera\" [Placeholder]=\"'To' | 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]=\"'User' | 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\" [SelectLabel]=\"'Action' | localize : lc\" [(ngModel)]=\"searchView.filteraction\" name=\"filteraction\" [Source]=\"Actions\"></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\" [SelectLabel]=\"'HTTP Method' | localize : lc\" [(ngModel)]=\"searchView.filterhttp\" name=\"filterhttp\" [Source]=\"HttpMethods\"></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.filterargs\" name=\"filterargs\" [Placeholder]=\"'Arguments' | 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]=\"'Object ID' | localize : lc\"></form-input>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterobjtype\" name=\"filterobjtype\" [Placeholder]=\"'Object Type' | 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>{{'Loading Application Audits' | 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'\">{{'Date' | localize : lc}}</span>\r\n <span *th=\"'User'\">{{'User' | localize : lc}}</span>\r\n <span *th=\"'Action'\">{{'Action' | localize : lc}}</span>\r\n <span *th=\"'HttpMethod'\">{{'HTTP Method' | localize : lc}}</span>\r\n <span *th=\"'Route'\">{{'Route' | localize : lc}}</span>\r\n <span *th=\"'Args'\">{{'Arguments' | localize : lc}}</span>\r\n <span *th=\"'HttpResponse'\">{{'HTTP Response' | localize : lc}}</span>\r\n <span *th=\"'NonStdErrorMessage'\">{{'Application Error Code' | localize : lc}}</span>\r\n <span *th=\"'ObjectType'\">{{'Object Type' | localize : lc}}</span>\r\n <span *th=\"'ObjectId'\">{{'Object ID' | localize : lc}}</span>\r\n <span *th=\"'ObjectData'\">{{'Object Data' | localize : lc}}</span>\r\n \r\n <strong *td=\"'Timestamp'; let pro\">{{pro.timestamp | loc_date:'DD/MM/YYYY HH:mm:ss'}}</strong>\r\n <span *td=\"'User'; let pro\">{{pro.user}}</span>\r\n <span *td=\"'Action'; let pro\">{{pro.action}}</span>\r\n <span *td=\"'HttpMethod'; let pro\">{{pro.httpmethod}}</span>\r\n <span *td=\"'Route'; let pro\">{{pro.route}}</span>\r\n <span *td=\"'Args'; let pro\">{{pro.args}}</span>\r\n <span *td=\"'HttpResponse'; let pro\">{{pro.httpresponse}}</span>\r\n <span *td=\"'NonStdErrorMessage'; let pro\">{{pro.mdmerrorcode}}</span>\r\n <span *td=\"'ObjectType'; let pro\">{{pro.objecttype}}</span>\r\n <span *td=\"'ObjectId'; let pro\">{{pro.objectid}}</span>\r\n <span *td=\"'ObjectData'; let pro\">{{pro.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>","import { AppSearch, GenericItem } from \"@esfaenza/es-table\";\r\n\r\nexport class ProcessesView extends AppSearch<GenericItem> {\r\n constructor() { super(); }\r\n\r\n filtertenant: string;\r\n filteruser: string;\r\n filterstate: string;\r\n filterglobal: boolean;\r\n}","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\nimport { ADM_LOCALE } from \"../../tokens\";\r\n\r\n@Injectable()\r\nexport class AdmWrkLoc extends LocalizationService {\r\n constructor(@Inject(ADM_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n\r\n super.set(\"en->it\", \"Consumer Group succesfully changed\", [\"Gruppo di Consumo modificato con successo\"]);\r\n super.set(\"en->it\", \"Errors changing Consumer Group\", [\"Errori nella modifica del Gruppo di Consumo\"]);\r\n super.set(\"en->it\", \"Change Consumer Group\", [\"Modifica Gruppo di Consumo\"]);\r\n super.set(\"en->it\", \"New Consumer Group\", [\"Nuovo Gruppo di Consumo\"]);\r\n\r\n super.set(\"en->it\", \"State\", [\"Stato\"]);\r\n super.set(\"en->it\", \"Global\", [\"Globale\"]);\r\n super.set(\"en->it\", \"Search Application Processes\", [\"Ricerca Processi Applicativi\"]);\r\n super.set(\"en->it\", \"Tenant\", [\"Operatore\"]);\r\n super.set(\"en->it\", \"Errors toggling Process Tracing\", [\"Errori nella modifica del Tracing del Processo\"]);\r\n super.set(\"en->it\", \"User\", [\"Utente\"]);\r\n super.set(\"en->it\", \"Loading Application Processes\", [\"Carico i Processi Applicativi\"]);\r\n super.set(\"en->it\", \"Activate Process Tracing\", [\"Attiva Tracing Processo\"]);\r\n super.set(\"en->it\", \"Deactivate Process Tracing\", [\"Disattiva Tracing Progetto\"]);\r\n super.set(\"en->it\", \"Kill Process\", [\"Ammazza Processo\"]);\r\n super.set(\"en->it\", \"Errors killing the Process\", [\"Errori durante la Kill del Processo\"]);\r\n super.set(\"en->it\", \"Process succesfully killed\", [\"Processo ucciso con successo\"]);\r\n super.set(\"en->it\", \"Confirm Process Kill\", [\"Conferma Terminazione del Processo\"]);\r\n super.set(\"en->it\", \"Are you sure you wish to kill the selected process? The associated user will be disconnected\", [\"Sei sicuro di voler Terminare il processo selezionato? L'utente relativo sara' disconnesso\"]);\r\n }\r\n}","// Angular\r\nimport { Component, Inject, ViewChild } from \"@angular/core\";\r\nimport { HttpParams } from \"@angular/common/http\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { Location } from \"@angular/common\";\r\nimport { NgForm } from \"@angular/forms\";\r\n\r\n// Configurazioni\r\nimport { MessageService, UtilityService } from \"@esfaenza/extensions\";\r\nimport { EsTableOperationDefinition } from \"@esfaenza/es-table\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PreferencesService } from \"@esfaenza/preferences\";\r\nimport { HTTPService } from \"@esfaenza/httpservice\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { ModalDirective } from \"ngx-bootstrap/modal\";\r\n\r\n// Applicazione\r\nimport { BaseModuleCommunicationsConsumer } from \"../../communications/base/BaseModuleCommunicationsConsumer\";\r\nimport { KeyValue } from \"../../models/shared/KeyValue\";\r\nimport { ProcessesView } from \"../../models/components/ProcessesView\";\r\nimport { Repository } from \"../../models/externals/Repository\";\r\nimport { ADM_BACKEND_URL, ADM_MODULE_PATH } from \"../../tokens\";\r\n\r\n// Localizzazione\r\nimport { AdmWrkLoc } from \"./adm_wrk.component.loc\";\r\n\r\n@Component({\r\n selector: \"adm_wrk\",\r\n viewProviders: [{ provide: LocalizationService, useClass: AdmWrkLoc }],\r\n templateUrl: \"./adm_wrk.component.html\"\r\n})\r\nexport class AdmWrkComponent {\r\n\r\n public searchView: ProcessesView = new ProcessesView();\r\n public DynamicOps: EsTableOperationDefinition[] = [];\r\n public storageSub: any;\r\n public valueToShow: string = \"\";\r\n\r\n constructor(\r\n private utiExts: UtilityService, \r\n private msgExts: MessageService, \r\n public lc: LocalizationService, \r\n private localStorage: PreferencesService, \r\n private _state: BaseModuleCommunicationsConsumer, \r\n private http: HTTPService, \r\n private route: ActivatedRoute, \r\n private location: Location, \r\n @Inject(ADM_BACKEND_URL) private backend: string,\r\n @Inject(ADM_MODULE_PATH) private mod: string) {\r\n\r\n this._state.handleNavigation(this.lc.loc(this.route.snapshot.data[\"title\"]), false);\r\n\r\n this.DynamicOps = [\r\n new EsTableOperationDefinition(\"trace_on\", this.lc.loc(\"Activate Process Tracing\"), \"fa fa-circle text-danger\", \"\", \"trace_enabled\", \"N\"),\r\n new EsTableOperationDefinition(\"trace_off\", this.lc.loc(\"Deactivate Process Tracing\"), \"fa fa-circle text-success\", \"\", \"trace_enabled\", \"Y\"),\r\n new EsTableOperationDefinition(\"kill\", this.lc.loc(\"Kill Process\"), \"fa fa-ban text-danger\"),\r\n new EsTableOperationDefinition(\"change_cg\", this.lc.loc(\"Change Consumer Group\"), \"fa fa-edit text-info\")\r\n ];\r\n }\r\n\r\n ngOnInit() {\r\n this.storageSub = this.route.queryParams.subscribe(params => {\r\n this.Init(params[\"ignoreStorage\"]);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.storageSub)\r\n this.storageSub.unsubscribe();\r\n }\r\n\r\n async Init(ignoreStorage) {\r\n let item = await this.localStorage.getItem<ProcessesView>(\"HotProcessato\").toPromise();\r\n if (!ignoreStorage && item) {\r\n this.init(item);\r\n } else {\r\n this.init(null);\r\n this.location.replaceState(`/pages/${this.mod}/serverworkers`);\r\n this.route.snapshot.queryParams = [];\r\n await this.localStorage.removeItem(\"HotProcessato\").toPromise();\r\n }\r\n }\r\n\r\n init(HotPotato: ProcessesView) {\r\n if (HotPotato) {\r\n this.searchView = HotPotato;\r\n this.POSTGetProcesses(this.backend + Repository[\"POST_Adm_GetServerWorkers\"], this.searchView);\r\n }\r\n else {\r\n this.searchView = new ProcessesView();\r\n this.sendSearch();\r\n }\r\n }\r\n\r\n sendSearch(resetPage: boolean = true) {\r\n this.searchView.searchinprogress = true;\r\n if (resetPage)\r\n this.searchView.page = 1;\r\n\r\n this.POSTGetProcesses(this.backend + Repository[\"POST_Adm_GetServerWorkers\"], this.searchView);\r\n }\r\n\r\n POSTGetProcesses(url: string, data: ProcessesView) {\r\n this.http.post<ProcessesView>(url, data).subscribe(t => {\r\n this.searchView = t;\r\n this.searchView.searchinprogress = false;\r\n this.localStorage.setItem(\"HotProcessato\", this.searchView).subscribe();\r\n });\r\n }\r\n\r\n back() {\r\n this.location.back();\r\n }\r\n\r\n onOperation(event: { id: string, item: any }) {\r\n switch (event.id) {\r\n case \"trace_on\": this.toggleTracing(event.item, true); break;\r\n case \"trace_off\": this.toggleTracing(event.item, false); break;\r\n case \"kill\": this.killProcess(event.item); break;\r\n case \"change_cg\": this.changeProcessCg(event.item); break;\r\n }\r\n }\r\n\r\n toggleTracing(process: any, tracing: boolean) {\r\n var pars = new HttpParams()\r\n .set(\"instanceid\", process.properties[\"inst_id\"])\r\n .set(\"sid\", process.properties[\"sid\"])\r\n .set(\"serial\", process.properties[\"serial\"])\r\n .set(\"enable\", tracing.toString());\r\n this.http.get<string>(this.backend + Repository[\"GET_Adm_SetProcessTracing\"], pars).subscribe(t => {\r\n this.msgExts.manageStringResponse(t, \"\", this.lc.loc(\"Errors toggling Process Tracing\"), () => this.sendSearch());\r\n });\r\n }\r\n\r\n killProcess(process: any) {\r\n this.msgExts.simpleWarningWithChoice(\r\n this.lc.loc(\"Confirm Process Kill\"),\r\n this.lc.loc(\"Are you sure you wish to kill the selected process? The associated user will be disconnected\"),\r\n () => {\r\n var pars = new HttpParams()\r\n .set(\"instanceid\", process.properties[\"inst_id\"])\r\n .set(\"sid\", process.properties[\"sid\"])\r\n .set(\"serial\", process.properties[\"serial\"]);\r\n this.http.get<string>(this.backend + Repository[\"GET_Adm_KillProcess\"], pars).subscribe(t => {\r\n this.msgExts.manageStringResponse(t, this.lc.loc(\"Process succesfully killed\"), this.lc.loc(\"Errors killing the Process\"), () => this.sendSearch());\r\n });\r\n });\r\n }\r\n\r\n //********************************************** Gestione modifica Consumer Group ***************************************\r\n\r\n newCg: string = \"\";\r\n CGs: KeyValue[] = [];\r\n CgDictionariesLoaded: boolean = false;\r\n ProcessOnEdit: any;\r\n\r\n @ViewChild(\"cgFrom\") cgFrom: NgForm;\r\n @ViewChild(\"dlgChangeCg\") dlgChangeCg: ModalDirective;\r\n\r\n changeProcessCg(process: any) {\r\n this.ProcessOnEdit = process;\r\n if (!this.CgDictionariesLoaded) {\r\n this.loadCgDictionaries();\r\n this.CgDictionariesLoaded = true;\r\n }\r\n this.setupChangeCg();\r\n this.dlgChangeCg.show();\r\n }\r\n\r\n loadCgDictionaries() {\r\n this.http.get<KeyValue[]>(this.backend + Repository[\"GET_Adm_GetConsumerGroups\"]).subscribe(t => this.CGs = t);\r\n }\r\n\r\n setupChangeCg() {\r\n this.utiExts.cleanForm(this.cgFrom)\r\n setTimeout(() => { this.newCg = \"\" });\r\n }\r\n\r\n doChangeCg() {\r\n var pars = new HttpParams()\r\n .set(\"instanceid\", this.ProcessOnEdit.properties[\"inst_id\"])\r\n .set(\"sid\", this.ProcessOnEdit.properties[\"sid\"])\r\n .set(\"serial\", this.ProcessOnEdit.properties[\"serial\"])\r\n .set(\"consumer_group\", this.newCg);\r\n this.http.get<string>(this.backend + Repository[\"GET_Adm_ChangeProcessConsumerGroup\"], pars).subscribe(t => {\r\n this.msgExts.manageStringResponse(t, this.lc.loc(\"Consumer Group succesfully changed\"), this.lc.loc(\"Errors changing Consumer Group\"), () => this.sendSearch());\r\n });\r\n\r\n return true;\r\n }\r\n}","<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\">{{'Search Application Processes' | localize : lc}}</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 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)]=\"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]=\"'User' | 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.filterstate\" name=\"filterState\" [Placeholder]=\"'State' | localize : lc\"></form-input>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper app-padding-top-10\">\r\n <form-checkbox [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterglobal\" name=\"filterglobal\"></form-checkbox>&nbsp;\r\n <span class=\"app-pointer\" (click)=\"searchView.filterglobal = !searchView.filterglobal\">{{'Global' | localize : lc}}</span>\r\n </div>\r\n <button [disabled]=\"searchView.searchinprogress\" class=\"input-group-addon btn app-btn-search app-margin-top-20\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Loading Application Processes' | localize : lc}}...</em></p>\r\n <div *ngIf=\"searchView\">\r\n <es-table [(ngModel)]=\"searchView\" [DynamicOperations]=\"DynamicOps\" [AutoUpdate]=\"true\" [OrderByColumn]=\"true\" (onSearchRequest)=\"sendSearch($event);\" (onDynamicOperation)=\"onOperation($event)\">\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()\">{{'Back' | 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\" cdkDrag>\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\" cdkDragHandle>\r\n <h4 class=\"modal-title pull-left\">{{'Change Consumer Group' | 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]=\"'New Consumer Group' | 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()\">{{'Close' | localize : lc}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary\">{{'Confirm' | 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>","declare var myconfig;\r\n\r\nexport const Locale: string = localStorage.getItem(\"LOCALE\") || myconfig.LOCALE;","export const ProfilerDataNode_loc = {\r\n 'Parent ID': { 'en-US': \"Parent ID\", 'it-IT': \"ID Padre\" },\r\n 'ID': { 'en-US': \"ID\", 'it-IT': \"ID\" },\r\n 'Description': { 'en-US': \"Description\", 'it-IT': \"Descrizione\" },\r\n 'Calls': { 'en-US': \"Calls\", 'it-IT': \"Chiamate\" },\r\n 'Time': { 'en-US': \"Time\", 'it-IT': \"Tempo\" },\r\n 'Peak Time': { 'en-US': \"Peak Time\", 'it-IT': \"Tempo Max\" },\r\n 'Min. Time': { 'en-US': \"Min. Time\", 'it-IT': \"Tempo Min\" },\r\n 'Avg. Time': { 'en-US': \"Avg. Time\", 'it-IT': \"Tempo Medio\" },\r\n 'Specific Time': { 'en-US': \"Specific Time\", 'it-IT': \"Tempo Specifico\" },\r\n 'Percentage': { 'en-US': \"Percentage\", 'it-IT': \"Percentuale\" },\r\n 'Calls for Period': { 'en-US': \"Calls for Period\", 'it-IT': \"Chiamate Periodo\" },\r\n 'Time for Period': { 'en-US': \"Time for Period\", 'it-IT': \"Tempo Periodo\" },\r\n 'Peak Time for Period': { 'en-US': \"Peak Time for Period\", 'it-IT': \"Tempo Max Periodo\" },\r\n 'Min. Time for Period': { 'en-US': \"Min. Time for Period\", 'it-IT': \"Tempo Min Periodo\" },\r\n 'Avg. Time for Period': { 'en-US': \"Avg. Time for Period\", 'it-IT': \"Tempo Medio Periodo\" },\r\n 'Specific Time for Period': { 'en-US': \"Specific Time for Period\", 'it-IT': \"Tempo Specifico Periodo\" },\r\n 'Percentage for Period': { 'en-US': \"Percentage for Period\", 'it-IT': \"Percentuale Periodo\" }\r\n}","import { autoserialize } from \"cerialize\";\r\nimport { Export } from \"@esfaenza/extensions\";\r\n\r\nimport { Locale } from \"../shared/Locale\";\r\nimport { ProfilerDataNode_loc } from \"./ProfilerDataNode.loc\";\r\n\r\nexport class ProfilerDataNode {\r\n @Export(10, ProfilerDataNode_loc[\"Parent ID\"][Locale])\r\n @autoserialize parentid: string;\r\n @Export(20, ProfilerDataNode_loc[\"ID\"][Locale])\r\n @autoserialize id: string;\r\n @Export(30, ProfilerDataNode_loc[\"Description\"][Locale])\r\n @autoserialize description: string;\r\n @Export(40, ProfilerDataNode_loc[\"Calls\"][Locale])\r\n @autoserialize calls: number;\r\n @Export(50, ProfilerDataNode_loc[\"Time\"][Locale])\r\n @autoserialize time: number;\r\n @Export(60, ProfilerDataNode_loc[\"Peak Time\"][Locale])\r\n @autoserialize peaktime: number;\r\n @Export(70, ProfilerDataNode_loc[\"Min. Time\"][Locale])\r\n @autoserialize mintime: number;\r\n @Export(80, ProfilerDataNode_loc[\"Avg. Time\"][Locale])\r\n @autoserialize avgtime: number;\r\n @Export(90, ProfilerDataNode_loc[\"Specific Time\"][Locale])\r\n @autoserialize timewithoutchildren: number;\r\n @Export(100, ProfilerDataNode_loc[\"Percentage\"][Locale])\r\n @autoserialize percentage: number;\r\n @Export(110, ProfilerDataNode_loc[\"Calls for Period\"][Locale])\r\n @autoserialize snapdeltacalls: number;\r\n @Export(120, ProfilerDataNode_loc[\"Time for Period\"][Locale])\r\n @autoserialize snapdeltatime: number;\r\n @Export(130, ProfilerDataNode_loc[\"Peak Time for Period\"][Locale])\r\n @autoserialize snappeaktime: number;\r\n @Export(140, ProfilerDataNode_loc[\"Min. Time for Period\"][Locale])\r\n @autoserialize snapmintime: number;\r\n @Export(150, ProfilerDataNode_loc[\"Avg. Time for Period\"][Locale])\r\n @autoserialize snapavgtime: number;\r\n @Export(160, ProfilerDataNode_loc[\"Specific Time for Period\"][Locale])\r\n @autoserialize snaptimewithoutchildren: number;\r\n @Export(170, ProfilerDataNode_loc[\"Percentage for Period\"][Locale])\r\n @autoserialize snappercentage: number;\r\n}","import { AppSearch } from \"@esfaenza/es-table\";\r\nimport { ProfilerDataNode } from \"./ProfilerDataNode\";\r\n\r\nexport class ProfilerDataNodesView extends AppSearch<ProfilerDataNode>{\r\n constructor() { super(); }\r\n\r\n filterfrom: string;\r\n filterto: string;\r\n}","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\nimport { ADM_LOCALE } from \"../../tokens\";\r\n\r\n@Injectable()\r\nexport class AdmProfilerComponentLoc extends LocalizationService {\r\n constructor(@Inject(ADM_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n\r\n super.set(\"en->it\", \"Server Profiler\", [\"Profiler del Server\"]);\r\n super.set(\"en->it\", \"Loading Data\", [\"Carico i Dati\"]);\r\n super.set(\"en->it\", \"ID\", [\"ID\"]);\r\n super.set(\"en->it\", \"Description\", [\"Descrizione\"]);\r\n super.set(\"en->it\", \"Calls\", [\"Chiamate\"]);\r\n super.set(\"en->it\", \"Time\", [\"Tempo\"]);\r\n super.set(\"en->it\", \"Peak Time\", [\"Tempo Max\"]);\r\n super.set(\"en->it\", \"Min. Time\", [\"Tempo Min\"]);\r\n super.set(\"en->it\", \"Avg. Time\", [\"Tempo Medio\"]);\r\n super.set(\"en->it\", \"Specific Time\", [\"Tempo Specifico\"]);\r\n super.set(\"en->it\", \"Percentage\", [\"Percentuale\"]);\r\n super.set(\"en->it\", \"Calls for Period\", [\"Chiamate Periodo\"]);\r\n super.set(\"en->it\", \"Time for Period\", [\"Tempo Periodo\"]);\r\n super.set(\"en->it\", \"Peak Time for Period\", [\"Tempo Max Periodo\"]);\r\n super.set(\"en->it\", \"Min. Time for Period\", [\"Tempo Min Periodo\"]);\r\n super.set(\"en->it\", \"Avg. Time for Period\", [\"Tempo Medio Periodo\"]);\r\n super.set(\"en->it\", \"Specific Time for Period\", [\"Tempo Specifico Periodo\"]);\r\n super.set(\"en->it\", \"Percentage for Period\", [\"Percentuale Periodo\"]);\r\n }\r\n}","// Angular\r\nimport { Component, Inject } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { Location } from \"@angular/common\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PreferencesService } from \"@esfaenza/preferences\";\r\nimport { ExportService } from \"@esfaenza/extensions\";\r\nimport { HTTPService } from \"@esfaenza/httpservice\";\r\n\r\n// Applicazione\r\nimport { BaseModuleCommunicationsConsumer } from \"../../communications/base/BaseModuleCommunicationsConsumer\";\r\nimport { ProfilerDataNode } from \"../../models/components/ProfilerDataNode\";\r\nimport { ProfilerDataNodesView } from \"../../models/components/ProfilerDataNodesView\";\r\nimport { Repository } from \"../../models/externals/Repository\";\r\nimport { ADM_BACKEND_URL, ADM_MODULE_PATH } from \"../../tokens\";\r\n\r\n// Localizzazione\r\nimport { AdmProfilerComponentLoc } from \"./adm_profiler.component.loc\";\r\n\r\n@Component({\r\n selector: \"adm_profiler\",\r\n providers: [{ provide: LocalizationService, useClass: AdmProfilerComponentLoc }],\r\n templateUrl: \"./adm_profiler.component.html\"\r\n})\r\nexport class AdmProfilerComponent {\r\n public searchView: ProfilerDataNodesView = new ProfilerDataNodesView();\r\n public storageSub: any;\r\n\r\n constructor(\r\n private expExts: ExportService,\r\n public lc: LocalizationService,\r\n private localStorage: PreferencesService,\r\n private location: Location,\r\n private _state: BaseModuleCommunicationsConsumer,\r\n private http: HTTPService,\r\n private route: ActivatedRoute,\r\n @Inject(ADM_BACKEND_URL) private backend: string,\r\n @Inject(ADM_MODULE_PATH) private mod: string) {\r\n\r\n this._state.handleNavigation(this.lc.loc(this.route.snapshot.data[\"title\"]), false);\r\n }\r\n\r\n ngOnInit() {\r\n this.storageSub = this.route.queryParams.subscribe(params => {\r\n this.Init(params[\"ignoreStorage\"]);\r\n });\r\n }\r\n\r\n Init(ignoreStore) {\r\n this.doInit(ignoreStore);\r\n }\r\n\r\n async doInit(ignoreStorage) {\r\n let item = await this.localStorage.getItem<ProfilerDataNodesView>(\"HotSearchProfilato\").toPromise();\r\n if (!ignoreStorage && item) {\r\n this.init(item);\r\n } else {\r\n this.init(null);\r\n this.location.replaceState(`/pages/${this.mod}/profiler`);\r\n this.route.snapshot.queryParams = [];\r\n await this.localStorage.removeItem(\"HotSearchProfilato\").toPromise();\r\n }\r\n }\r\n\r\n init(HotPotato: ProfilerDataNodesView) {\r\n if (HotPotato) {\r\n this.searchView = HotPotato;\r\n this.POSTGetItems(this.backend + Repository[\"POST_Adm_GetProfilerDataNodes\"], this.searchView);\r\n }\r\n else {\r\n this.searchView = new ProfilerDataNodesView();\r\n this.sendSearch();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.storageSub)\r\n this.storageSub.unsubscribe();\r\n }\r\n\r\n sendSearch(resetPage: boolean = true) {\r\n this.searchView.searchinprogress = true;\r\n if (resetPage)\r\n this.searchView.page = 1;\r\n\r\n this.POSTGetItems(this.backend + Repository[\"POST_Adm_GetProfilerDataNodes\"], this.searchView);\r\n }\r\n\r\n POSTGetItems(url: string, data: ProfilerDataNodesView) {\r\n this.http.post<ProfilerDataNodesView>(url, data).subscribe(t => {\r\n this.searchView = t;\r\n this.searchView.searchinprogress = false;\r\n this.localStorage.setItem(\"HotSearchProfilato\", this.searchView).subscribe();\r\n });\r\n }\r\n\r\n prepareExport(dataCallBack) {\r\n var view = JSON.parse(JSON.stringify(this.searchView));\r\n view.page = 1;\r\n view.itemsperpageoverride = 9999999;\r\n this.http.post<ProfilerDataNodesView>(this.backend + Repository[\"POST_Adm_GetProfilerDataNodes\"], view).subscribe(t => {\r\n let items: ProfilerDataNode[] = this.expExts.deserializeForExport(t.items, ProfilerDataNode);\r\n dataCallBack(items);\r\n });\r\n }\r\n}","<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card app-overflow-visible\" widget>\r\n <div class=\"card-header\">\r\n <span class=\"text-uppercase\">{{'Server Profiler' | localize : lc}}</span>&nbsp;\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <div class=\"col-md-12 bottom-15\">\r\n <form role=\"form\">\r\n <div class=\"row app-first-filter-line\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterfrom\" name=\"filterfrom\" [Placeholder]=\"'From' | localize : lc\"></form-date>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterto\" name=\"filterto\" [Placeholder]=\"'To' | localize : lc\"></form-date>\r\n </div>\r\n <button [disabled]=\"searchView.searchinprogress\" class=\"input-group-addon btn app-btn-search app-margin-top-20\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Loading Data' | localize : lc}}</em></p>\r\n <div *ngIf=\"searchView\">\r\n <es-table [(ngModel)]=\"searchView\" [Hierarchy]=\"true\" [OrderByColumn]=\"false\" [ParentKey]=\"'parentid'\"\r\n [OwnKey]=\"'id'\" [StartsExpanded]=\"false\" [ExportFunction]=\"prepareExport.bind(this)\" [Export]=\"true\"\r\n [ExportFileName]=\"'Profiler Export.csv'\" [HidePaging]=\"true\" (onSearchRequest)=\"sendSearch($event);\">\r\n \r\n <span *th=\"'1'\">{{'ID' | localize : lc}}</span>\r\n <span *th=\"'2'\">{{'Description' | localize : lc}}</span>\r\n <span *th=\"'3'\">{{'Calls' | localize : lc}}</span>\r\n <span *th=\"'4'\">{{'Time' | localize : lc}}</span>\r\n <span *th=\"'5'\">{{'Peak Time' | localize : lc}}</span>\r\n <span *th=\"'6'\">{{'Min. Time' | localize : lc}}</span>\r\n <span *th=\"'7'\">{{'Avg. Time' | localize : lc}}</span>\r\n <span *th=\"'8'\">{{'Specific Time' | localize : lc}}</span>\r\n <span *th=\"'9'\">{{'Percentage' | localize : lc}}</span>\r\n <span *th=\"'10'\">{{'Calls for Period' | localize : lc}}</span>\r\n <span *th=\"'11'\">{{'Time for Period' | localize : lc}}</span>\r\n <span *th=\"'12'\">{{'Peak Time for Period' | localize : lc}}</span>\r\n <span *th=\"'13'\">{{'Min. Time for Period' | localize : lc}}</span>\r\n <span *th=\"'14'\">{{'Avg. Time for Period' | localize : lc}}</span>\r\n <span *th=\"'15'\">{{'Specific Time for Period' | localize : lc}}</span>\r\n <span *th=\"'16'\">{{'Percentage for Period' | localize : lc}}</span>\r\n\r\n <span *td=\"'1'; let item\">{{item.id}}</span>\r\n <span *td=\"'2'; let item\" title=\"{{item.description}}\">{{item.description.length <= 50 ? item.description : item.description.substr(0,50) + \"[...]\" }}</span>\r\n <span *td=\"'3'; let item\">{{item.calls}}</span>\r\n <span *td=\"'4'; let item\">{{item.time}}</span>\r\n <span *td=\"'5'; let item\">{{item.peaktime}}</span>\r\n <span *td=\"'6'; let item\">{{item.mintime}}</span>\r\n <span *td=\"'7'; let item\">{{item.avgtime}}</span>\r\n <span *td=\"'8'; let item\">{{item.timewithoutchildren}}</span>\r\n <span *td=\"'9'; let item\">{{item.percentage}}</span>\r\n <span *td=\"'10' let item\">{{item.snapdeltacalls}}</span>\r\n <span *td=\"'11' let item\">{{item.snapdeltatime}}</span>\r\n <span *td=\"'12' let item\">{{item.snappeaktime}}</span>\r\n <span *td=\"'13' let item\">{{item.snapmintime}}</span>\r\n <span *td=\"'14' let item\">{{item.snapavgtime}}</span>\r\n <span *td=\"'15' let item\">{{item.snaptimewithoutchildren}}</span>\r\n <span *td=\"'16' let item\">{{item.snappercentage}}</span>\r\n </es-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { AppSearch } from \"@esfaenza/es-table\";\r\nimport { TopActivity } from \"./TopActivity\";\r\n\r\nexport class TopActivitiesDataView extends AppSearch<TopActivity>{\r\n constructor() { super(); }\r\n\r\n filterfrom: string;\r\n filterto: string;\r\n}","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\nimport { ADM_LOCALE } from \"../../tokens\";\r\n\r\n@Injectable()\r\nexport class AdmTopActivitieLoc extends LocalizationService {\r\n constructor(@Inject(ADM_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n super.set(\"en->it\", \"Active Sessions\", [\"Sessioni Attive\"]);\r\n super.set(\"en->it\", \"Top Nodes\", [\"Prime Istruzioni\"]);\r\n super.set(\"en->it\", \"Top Sessions\", [\"Prime Sessioni\"]);\r\n super.set(\"en->it\", \"Loading Data\", [\"Carico i Dati\"]);\r\n super.set(\"en->it\", \"Top Activities\", [\"Attivita' Principali\"]);\r\n \r\n super.set(\"en->it\", \"Node Description\", [\"Descrizione Nodo\"]);\r\n super.set(\"en->it\", \"Node\", [\"Nodo\"]);\r\n super.set(\"en->it\", \"Activity\", [\"Attivita'\"]);\r\n super.set(\"en->it\", \"Limit\", [\"Limite\"]);\r\n super.set(\"en->it\", \"Node Type\", [\"Tipo Nodo\"]);\r\n\r\n super.set(\"en->it\", \"User\", [\"Utente\"]);\r\n super.set(\"en->it\", \"Tenant\", [\"Tenant\"]);\r\n super.set(\"en->it\", \"Process\", [\"Processo\"]);\r\n\r\n super.set(\"en->it\", \"Update every\", [\"Aggiorna ogni\"]);\r\n super.set(\"en->it\", \"second/s\", [\"secondo/i\"]);\r\n super.set(\"en->it\", \"Maximum Threads\", [\"Thread Massimi\"]);\r\n super.set(\"en->it\", \"CPUs\", [\"CPU\"]);\r\n \r\n }\r\n}","// Angular\r\nimport { Component, Inject } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { Location } from \"@angular/common\";\r\n\r\n// Configurazioni\r\nimport { BaseChartComponent, DateValue, Limit, LineChartData, LineSerie } from \"@esfaenza/es-charts\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PreferencesService } from \"@esfaenza/preferences\";\r\nimport { HTTPService } from \"@esfaenza/httpservice\";\r\nimport { DateService } from \"@esfaenza/extensions\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\nimport { map } from \"rxjs/operators\";\r\n\r\n// Applicazione\r\nimport { BaseModuleCommunicationsConsumer } from \"../../communications/base/BaseModuleCommunicationsConsumer\";\r\nimport { DirectorInfos } from \"../../models/components/DirectorInfos\";\r\nimport { Repository } from \"../../models/externals/Repository\";\r\nimport { TopActivitiesDataView } from \"../../models/components/TopActivitiesDataView\";\r\nimport { TopNode } from \"../../models/components/TopNode\";\r\nimport { TopSession } from \"../../models/components/TopSession\";\r\nimport { ADM_BACKEND_URL, ADM_MODULE_PATH } from \"../../tokens\";\r\n\r\n// Localizzazione\r\nimport { AdmTopActivitieLoc } from \"./topact_search.component.loc\";\r\n\r\n/**\r\n * Dichiarazione della variabile globale dayjs. L'onere di \"crearla\" è affidato all'applicazione che utilizza questa libreria, \r\n * che dovrà importare lo script globale di dayjs nella CLI\r\n */\r\n declare var dayjs: any;\r\n\r\n@Component({\r\n selector: \"topact_search\",\r\n providers: [\r\n { provide: LocalizationService, useClass: AdmTopActivitieLoc }\r\n ],\r\n templateUrl: \"./topact_search.component.html\"\r\n})\r\nexport class AdmTopActivitiesComponent {\r\n public searchView: TopActivitiesDataView = new TopActivitiesDataView();\r\n public storageSub: any;\r\n private LastDataPoint: any;\r\n\r\n public autoUpdate: boolean = false;\r\n public seconds: string = \"5\";\r\n\r\n private ChartInstance: BaseChartComponent;\r\n\r\n constructor(\r\n public dateExts: DateService,\r\n public lc: LocalizationService,\r\n private localStorage: PreferencesService,\r\n private location: Location,\r\n private _state: BaseModuleCommunicationsConsumer,\r\n private http: HTTPService,\r\n private route: ActivatedRoute,\r\n @Inject(ADM_BACKEND_URL) private backend: string,\r\n @Inject(ADM_MODULE_PATH) private mod: string) {\r\n\r\n this._state.handleNavigation(this.lc.loc(this.route.snapshot.data[\"title\"]), false);\r\n }\r\n\r\n ngOnInit() {\r\n this.storageSub = this.route.queryParams.subscribe(params => {\r\n this.Init(params[\"ignoreStorage\"]);\r\n });\r\n }\r\n\r\n Init(ignoreStore) {\r\n this.doInit(ignoreStore);\r\n }\r\n\r\n async doInit(ignoreStorage) {\r\n let item = await this.localStorage.getItem<TopActivitiesDataView>(\"HotSearchTopAct\").toPromise();\r\n if (!ignoreStorage && item) {\r\n this.init(item);\r\n } else {\r\n this.init(null);\r\n this.location.replaceState(`/pages/${this.mod}/topact`);\r\n this.route.snapshot.queryParams = [];\r\n await this.localStorage.removeItem(\"HotSearchTopAct\").toPromise();\r\n }\r\n }\r\n\r\n init(HotPotato: TopActivitiesDataView) {\r\n if (HotPotato) {\r\n this.searchView = HotPotato;\r\n this.POSTGetItems(this.backend + Repository[\"POST_Adm_GetTopActivities\"], this.searchView, false);\r\n }\r\n else {\r\n this.searchView = new TopActivitiesDataView();\r\n this.sendSearch();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.storageSub)\r\n this.storageSub.unsubscribe();\r\n }\r\n\r\n sendSearch(resetPage: boolean = true, update: boolean = false, searchViewOverride: TopActivitiesDataView = null) {\r\n this.searchView.searchinprogress = true;\r\n if (resetPage)\r\n this.searchView.page = 1;\r\n\r\n this.POSTGetItems(this.backend + Repository[\"POST_Adm_GetTopActivities\"], searchViewOverride ?? this.searchView, update);\r\n }\r\n\r\n POSTGetItems(url: string, data: TopActivitiesDataView, update: boolean) {\r\n\r\n this.http.post<TopActivitiesDataView>(url, data).subscribe(async (t) => {\r\n //Se sono in modalità di update non devo toccare la searchView attuale se non per il searchinprogress che viene messo dall'es table\r\n if (!update) {\r\n this.searchView = t;\r\n this.localStorage.setItem(\"HotSearchTopAct\", this.searchView).subscribe();\r\n }\r\n var dirinfos = await this.getDirectorInfos();\r\n this.searchView.searchinprogress = false;\r\n this.reviewBindings(update, t, dirinfos);\r\n });\r\n }\r\n\r\n getDirectorInfos(): Promise<DirectorInfos> {\r\n return this.http.get<DirectorInfos>(this.backend + Repository[\"GET_Adm_GetInfos\"]).pipe(map(res => { return res; })).toPromise();\r\n }\r\n\r\n // **************************************************** Trasformazione da searchview con unico elemento con tutto ai 3 elementi:\r\n // **************************************************** Grafico, TopNodes e TopSessions\r\n TopActiveSessions: LineChartData;\r\n TopNodes: TopNode[];\r\n TopSessions: TopSession[];\r\n DirInfos: DirectorInfos;\r\n seriesPropertiesMapping: { [index: string]: LineSerie } = {};\r\n propertiesSeriesMapping: { [index: string]: string } = {\r\n [\"cputime\"]: \"CPU\",\r\n [\"waittime\"]: \"Wait\",\r\n [\"scripttime\"]: \"Scripting\",\r\n [\"dbtime\"]: \"DB\",\r\n [\"nettime\"]: \"Network\",\r\n [\"throttletime\"]: \"Throttling\",\r\n [\"sleeptime\"]: \"Sleep\",\r\n [\"iotime\"]: \"IO\"\r\n };\r\n\r\n reviewBindings(update: boolean, searchViewOverride?, dirInfos?: DirectorInfos) {\r\n let reference = (searchViewOverride ?? this.searchView).items[0];\r\n this.TopNodes = reference.topnodes;\r\n this.TopSessions = reference.topsessions;\r\n this.DirInfos = dirInfos;\r\n\r\n if (!reference.actsessions || reference.actsessions.length == 0) {\r\n this.TopActiveSessions = null;\r\n return;\r\n }\r\n\r\n let series: LineSerie[] = []; \r\n let props = Object.keys(reference.actsessions[0]);\r\n for (let i = 0; i < props.length; i++) {\r\n if (props[i] != 'sampletime') {\r\n let s = new LineSerie(this.propertiesSeriesMapping[props[i]], [], null, null, \"sessions\");\r\n series.push(s);\r\n this.seriesPropertiesMapping[props[i]] = s;\r\n }\r\n }\r\n\r\n for (let i = 0; i < reference.actsessions.length; i++) {\r\n let itemref = reference.actsessions[i];\r\n let theD = new Date(itemref.sampletime);\r\n\r\n for (let i = 0; i < props.length; i++)\r\n if (props[i] != 'sampletime' && (!update || this.dateExts.getDateConvertion(theD).isAfter(this.LastDataPoint)))\r\n this.seriesPropertiesMapping[props[i]].values.push(new DateValue(theD, itemref[props[i]]));\r\n }\r\n\r\n if (update && this.ChartInstance) {\r\n let data = new LineChartData(series, new Limit(dirInfos?.threads, this.lc.loc(\"Maximum Threads\")));\r\n if (series.some(t => t.values.length > 0)) {\r\n this.ChartInstance.addData(data);\r\n this.LastDataPoint = series.map(t => dayjs.max(t.values.map(v => this.dateExts.getDateConvertion(v.d))))[0];\r\n }\r\n }\r\n else {\r\n this.TopActiveSessions = new LineChartData(series, new Limit(dirInfos?.threads, this.lc.loc(\"Maximum Threads\")));\r\n this.LastDataPoint = series.map(t => dayjs.max(t.values.map(v => this.dateExts.getDateConvertion(v.d))))[0];\r\n }\r\n }\r\n\r\n // #region Gestione update automatico\r\n updateTimer: any;\r\n autoUpdateChanged() {\r\n if (!/^[1-9]\\d*$/.test(this.seconds))\r\n this.seconds = '10';\r\n const secondsInMs = parseInt(this.seconds, null) * 1000;\r\n if (this.autoUpdate) {\r\n this.sendSearch(false, true);\r\n this.updateTimer = setInterval(() => { this.sendSearch(false, true); }, secondsInMs);\r\n }\r\n else\r\n clearInterval(this.updateTimer);\r\n }\r\n // #endregion\r\n\r\n private from: Date;\r\n private to: Date;\r\n\r\n dataSelectionChanged(event: { from: Date, to: Date, initial: boolean }) {\r\n this.from = event.initial ? (this.searchView.filterfrom ? this.dateExts.getDateConvertion(this.searchView.filterfrom).toDate() : \"\") : event.from;\r\n this.to = event.initial ? (this.searchView.filterto ? this.dateExts.getDateConvertion(this.searchView.filterto).toDate() : \"\") : event.to;\r\n\r\n var pseudoSearchView: TopActivitiesDataView = JSON.parse(JSON.stringify(this.searchView));\r\n pseudoSearchView.filterfrom = this.from ? dayjs(this.from).format(this.lc.token(\"getFullDateDisplayFormat\")) : \"\";\r\n pseudoSearchView.filterto = this.to ? dayjs(this.to).format(this.lc.token(\"getFullDateDisplayFormat\")) : \"\";\r\n this.sendSearch(true, true, pseudoSearchView);\r\n }\r\n\r\n onChartLoaded(chart: BaseChartComponent) {\r\n this.ChartInstance = chart;\r\n chart.Chart.events.on(\"ready\", () => {\r\n (<am4charts.XYChart>chart.Chart).xAxes.each(x => x.zoom({ start: 0, end: 1 }, true, true));\r\n (<am4charts.XYChart>chart.Chart).yAxes.each(y => y.zoom({ start: 0, end: 1 }, true, true));\r\n setTimeout(() => {\r\n (<am4charts.XYChart>chart.Chart).xAxes.each(x => x.zoom({ start: 0, end: 1 }, true, true));\r\n (<am4charts.XYChart>chart.Chart).yAxes.each(y => y.zoom({ start: 0, end: 1 }, true, true));\r\n\r\n // 500 millisecondi è più o meno il tempo di prima animazione del grafico. Finito questo si resetta lo zoom\r\n }, 500);\r\n });\r\n }\r\n}","<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 {{'Top Activities' | localize : lc}}\r\n <span *ngIf=\"DirInfos\">&nbsp;-&nbsp;{{'' + DirInfos.cpus + ' ' + ('CPUs' | localize : lc) + (DirInfos.rssplan ? ' - ' + DirInfos.rssplan : '')}}</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]=\"'From' | 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]=\"'To' | 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 {{'Update every' | localize : lc}}&nbsp;<input [readonly]=\"autoUpdate\" maxlength=\"3\" class=\"form-control app-updevery-input\" type=\"text\" [(ngModel)]=\"seconds\" name=\"secs\" />&nbsp;{{'second/s' | localize : lc}}\r\n </div>\r\n <div class=\"pull-right m-t-2 app-margin-right-5\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" [(ngModel)]=\"autoUpdate\" (ngModelChange)=\"autoUpdateChanged();\" />\r\n <div class=\"slider round\"></div>\r\n </label>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </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>{{'Loading Data' | localize : lc}}</em></p>\r\n <div *ngIf=\"searchView\" class=\"row\">\r\n <div class=\"col-md-12 app-no-padding\">\r\n <!--<h5 class=\"app-margin-top-5\">{{'Active Sessions' | localize : lc}}</h5>-->\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 [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>{{'Top Nodes' | localize : lc}}</h5>\r\n <es-table [(ngModel)]=\"TopNodes\" [HidePaging]=\"true\">\r\n <ng-template #header>\r\n <th class=\"app-col-min\">{{'Node' | localize : lc}}</th>\r\n <th>{{'Node Description' | localize : lc}}</th>\r\n <th class=\"app-col-min\">{{'Activity' | localize : lc}}</th>\r\n <th class=\"app-col-min app-nowrap\">{{'Node Type' | localize : lc}}</th>\r\n </ng-template>\r\n <ng-template #body let-node>\r\n <td class=\"app-col-min\"><strong>{{node.profnodeid}}</strong></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 </ng-template>\r\n </es-table>\r\n </div>\r\n <div class=\"col-md-7\">\r\n <h5>{{'Top Sessions' | 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>{{'User' | localize : lc}}</th>\r\n <th>{{'Tenant' | localize : lc}}</th>\r\n <th>{{'Process' | localize : lc}}</th>\r\n <th>{{'Activity' | 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><strong>{{session.sid}}</strong></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>","import { AppSearch, GenericItem } from \"@esfaenza/es-table\";\r\n\r\nexport class LocksView extends AppSearch<GenericItem>{\r\n constructor() { super(); }\r\n\r\n filtersid: string;\r\n filterlock: string;\r\n filterglobal: boolean;\r\n}","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\nimport { ADM_LOCALE } from \"../../tokens\";\r\n\r\n@Injectable()\r\nexport class AdmEnqLoc extends LocalizationService {\r\n constructor(@Inject(ADM_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n super.set(\"en->it\", \"Search Application Locks\", [\"Ricerca Lock Applicativi\"]);\r\n super.set(\"en->it\", \"Name\", [\"Nome\"]);\r\n super.set(\"en->it\", \"Loading Application Locks\", [\"Carico i Lock Applicativi\"]);\r\n super.set(\"en->it\", \"Global\", [\"Globale\"]);\r\n }\r\n}","// Angular\r\nimport { Component, Inject } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { Location } from \"@angular/common\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PreferencesService } from \"@esfaenza/preferences\";\r\nimport { ExportService } from \"@esfaenza/extensions\";\r\nimport { HTTPService } from \"@esfaenza/httpservice\";\r\n\r\n// Applicazione\r\nimport { BaseModuleCommunicationsConsumer } from \"../../communications/base/BaseModuleCommunicationsConsumer\";\r\nimport { LocksView } from \"../../models/components/LocksView\";\r\nimport { Repository } from \"../../models/externals/Repository\";\r\nimport { ADM_BACKEND_URL, ADM_MODULE_PATH } from \"../../tokens\";\r\n\r\n// Localizzazione\r\nimport { AdmEnqLoc } from \"./adm_enq.component.loc\";\r\n\r\n@Component({\r\n selector: \"adm_enq\",\r\n viewProviders: [{ provide: LocalizationService, useClass: AdmEnqLoc }],\r\n templateUrl: \"./adm_enq.component.html\"\r\n})\r\nexport class AdmEnqComponent {\r\n public locksView: LocksView = new LocksView();\r\n public storageSub: any;\r\n\r\n constructor(\r\n public lc: LocalizationService,\r\n private localStorage: PreferencesService,\r\n public expExts: ExportService,\r\n private _state: BaseModuleCommunicationsConsumer,\r\n private http: HTTPService,\r\n private route: ActivatedRoute,\r\n private location: Location,\r\n @Inject(ADM_BACKEND_URL) private backend: string,\r\n @Inject(ADM_MODULE_PATH) private mod: string) {\r\n\r\n this._state.handleNavigation(this.lc.loc(this.route.snapshot.data[\"title\"]), false);\r\n }\r\n\r\n ngOnInit() {\r\n this.storageSub = this.route.queryParams.subscribe(params => { this.Init(params[\"ignoreStorage\"]); });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.storageSub)\r\n this.storageSub.unsubscribe();\r\n }\r\n\r\n async Init(ignoreStorage) {\r\n let item = await this.localStorage.getItem<LocksView>(\"HotEnqueue\").toPromise();\r\n if (!ignoreStorage && item) {\r\n this.init(item);\r\n } else {\r\n this.init(null);\r\n this.location.replaceState(`/pages/${this.mod}/serverenqueues`);\r\n this.route.snapshot.queryParams = [];\r\n await this.localStorage.removeItem(\"HotEnqueue\").toPromise();\r\n }\r\n }\r\n\r\n init(HotPotato: LocksView) {\r\n if (HotPotato) {\r\n this.locksView = HotPotato;\r\n this.POSTGetProcesses(this.backend + Repository[\"POST_Adm_GetServerLocks\"], this.locksView);\r\n }\r\n else {\r\n this.locksView = new LocksView();\r\n this.sendSearch();\r\n }\r\n }\r\n\r\n sendSearch(resetPage: boolean = true) {\r\n if (resetPage)\r\n this.locksView.page = 1;\r\n\r\n this.POSTGetProcesses(this.backend + Repository[\"POST_Adm_GetServerLocks\"], this.locksView);\r\n }\r\n\r\n POSTGetProcesses(url: string, data: LocksView) {\r\n this.http.post<LocksView>(url, data).subscribe(t => {\r\n this.locksView = t;\r\n this.localStorage.setItem(\"HotEnqueue\", this.locksView).subscribe();\r\n });\r\n }\r\n}","<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\">{{'Search Application Locks' | 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]=\"'Name' | localize : lc\"></form-input>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper app-padding-top-10\">\r\n <form-checkbox [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"locksView.filterglobal\" name=\"filterglobal\"></form-checkbox>&nbsp;\r\n <span class=\"app-pointer\" (click)=\"locksView.filterglobal = !locksView.filterglobal\">{{'Global' | 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>{{'Loading Application Locks' | localize : lc}}...</em></p>\r\n <div *ngIf=\"locksView\">\r\n <es-table [(ngModel)]=\"locksView\" [AutoUpdate]=\"true\" [OrderByColumn]=\"true\" (onSearchRequest)=\"sendSearch($event);\"></es-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","export class KeyValue {\r\n constructor(public id: string, public description: string) { }\r\n}","import { AppSearch } from \"@esfaenza/es-table\";\r\nimport { Metric } from \"./Metric\";\r\n\r\nexport class MetricsView extends AppSearch<Metric> {\r\n constructor() { super(); }\r\n\r\n filterfrom: string;\r\n filterto: string;\r\n filtersid: string;\r\n filterserial: string;\r\n filtermetrics: string[];\r\n filterrealtime: boolean;\r\n fitlerinstance: string;\r\n}","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\nimport { ADM_LOCALE } from \"../../tokens\";\r\n\r\n@Injectable()\r\nexport class AdmMetricsLoc extends LocalizationService {\r\n constructor(@Inject(ADM_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n super.set(\"en->it\", \"System Metrics\", [\"Metriche di Sistema\"]);\r\n super.set(\"en->it\", \"Session ID\", [\"Cod. Sessione\"]);\r\n super.set(\"en->it\", \"Session Serial\", [\"Seriale Sessione\"]);\r\n super.set(\"en->it\", \"Filter Metrics...\", [\"Filtra Metriche...\"]);\r\n super.set(\"en->it\", \"Loading Data\", [\"Carico i Dati\"]);\r\n super.set(\"en->it\", \"Update every\", [\"Aggiorna ogni\"]);\r\n super.set(\"en->it\", \"second/s\", [\"secondo/i\"]);\r\n super.set(\"en->it\", \"Metrics Instance\", [\"Istanza Metriche\"]);\r\n }\r\n}","// Angular\r\nimport { HttpParams } from \"@angular/common/http\";\r\nimport { Component, Inject } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { Location } from \"@angular/common\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PreferencesService } from \"@esfaenza/preferences\";\r\nimport { BaseChartComponent } from \"@esfaenza/es-charts\";\r\nimport { HTTPService } from \"@esfaenza/httpservice\";\r\nimport { DateService } from \"@esfaenza/extensions\";\r\n\r\n// Applicazione\r\nimport { BaseModuleCommunicationsConsumer } from \"../../communications/base/BaseModuleCommunicationsConsumer\";\r\nimport { KeyValue } from \"../../models/shared/KeyValue\";\r\nimport { Metric } from \"../../models/components/Metric\";\r\nimport { MetricChart } from \"../../models/components/MetricChart\";\r\nimport { MetricsView } from \"../../models/components/MetricsView\";\r\nimport { Repository } from \"../../models/externals/Repository\";\r\nimport { ADM_BACKEND_URL, ADM_MODULE_PATH } from \"../../tokens\";\r\n\r\n// Localizzazione\r\nimport { AdmMetricsLoc } from \"./metrics_search.component.loc\";\r\n\r\n/**\r\n * Dichiarazione della variabile globale dayjs. L'onere di \"crearla\" è affidato all'applicazione che utilizza questa libreria, \r\n * che dovrà importare lo script globale di dayjs nella CLI\r\n */\r\ndeclare var dayjs: any;\r\n\r\n@Component({\r\n selector: \"metrics_search\",\r\n providers: [\r\n { provide: LocalizationService, useClass: AdmMetricsLoc }\r\n ],\r\n templateUrl: \"./metrics_search.component.html\"\r\n})\r\nexport class AdmMetricsComponent {\r\n\r\n public Metrics: Metric[];\r\n private MetricsChartCache: { [name: string]: { chart: BaseChartComponent, lastTs: Date } } = {};\r\n\r\n public searchView: MetricsView = new MetricsView();\r\n public storageSub: any;\r\n\r\n public autoUpdate: boolean = false;\r\n public seconds: string = \"5\";\r\n\r\n constructor(\r\n public dateExts: DateService,\r\n public lc: LocalizationService,\r\n private localStorage: PreferencesService,\r\n private location: Location,\r\n private _state: BaseModuleCommunicationsConsumer,\r\n private http: HTTPService,\r\n private route: ActivatedRoute,\r\n @Inject(ADM_BACKEND_URL) private backend: string,\r\n @Inject(ADM_MODULE_PATH) private mod: string) {\r\n\r\n this._state.handleNavigation(this.lc.loc(this.route.snapshot.data[\"title\"]), false);\r\n }\r\n\r\n ngOnInit() {\r\n this.storageSub = this.route.queryParams.subscribe(params => {\r\n this.Init(params[\"ignoreStorage\"]);\r\n });\r\n }\r\n\r\n Init(ignoreStore) {\r\n this.doInit(ignoreStore);\r\n }\r\n\r\n dateChanged() {\r\n // Pulizia di tutti i parametri di ricerca dipendenti dalle date\r\n this.metricsToShow = [];\r\n this.Metrics = [];\r\n this.instanceRequired = false;\r\n this.Instances = [];\r\n this.selectedInstance = \"\";\r\n this.searchView.filtermetrics = [];\r\n\r\n var pars = new HttpParams().set(\"from\", this.searchView.filterfrom || \"\").set(\"to\", this.searchView.filterto || \"\")\r\n this.http.get<Metric[]>(this.backend + Repository[\"GET_Adm_GetMetrics\"], pars).subscribe(t => this.Metrics = t);\r\n }\r\n\r\n async doInit(ignoreStorage) {\r\n let item = await this.localStorage.getItem<MetricsView>(\"HotSearchMetrics\").toPromise();\r\n if (!ignoreStorage && item) {\r\n this.init(item);\r\n } else {\r\n this.init(null);\r\n this.location.replaceState(`/pages/${this.mod}/metrics`);\r\n this.route.snapshot.queryParams = [];\r\n await this.localStorage.removeItem(\"HotSearchMetrics\").toPromise();\r\n }\r\n }\r\n\r\n init(HotPotato: MetricsView) {\r\n if (HotPotato) {\r\n this.searchView = HotPotato;\r\n this.POSTGetItems(this.backend + Repository[\"POST_Adm_GetMetrics\"], this.searchView, false);\r\n }\r\n else {\r\n this.searchView = new MetricsView();\r\n this.sendSearch();\r\n }\r\n this.dateChanged();\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.storageSub)\r\n this.storageSub.unsubscribe();\r\n }\r\n\r\n sendSearch(resetPage: boolean = true, update: boolean = false, searchViewOverride: MetricsView = null) {\r\n if (!update)\r\n this.MetricsChartCache = {};\r\n\r\n this.searchView.searchinprogress = true;\r\n // Questa ricerca prende i nomi distinct delle metriche quindi devo prendere tutto per forza\r\n this.searchView.itemsperpageoverride = 999999;\r\n if (resetPage)\r\n this.searchView.page = 1;\r\n\r\n this.POSTGetItems(this.backend + Repository[\"POST_Adm_GetMetrics\"], searchViewOverride ?? this.searchView, update);\r\n }\r\n\r\n public Instances: KeyValue[] = []\r\n public selectedInstance = \"\";\r\n public instanceRequired: boolean = false;\r\n public metricsToShow: Metric[] = [];\r\n\r\n POSTGetItems(url: string, data: MetricsView, update: boolean) {\r\n data.filterrealtime = update ? data.filterrealtime : !(!!data.filterfrom || !!data.filterto);\r\n\r\n this.http.post<MetricsView>(url, data).subscribe(async (t) => {\r\n //Se sono in modalità di update non devo toccare la searchView attuale se non per il searchinprogress che viene messo dall'es table\r\n if (!update) {\r\n this.selectedInstance = \"\";\r\n this.metricsToShow = [];\r\n this.searchView = t;\r\n this.searchView.items.forEach(m => {\r\n if (!this.Instances.find(t => t.id == m.instance))\r\n this.Instances.push(new KeyValue(m.instance, m.instance));\r\n });\r\n this.instanceRequired = this.Instances.length > 1;\r\n if (this.Instances.length == 1) {\r\n this.selectedInstance = this.Instances[0].id;\r\n this.instanceSelected();\r\n }\r\n this.localStorage.setItem(\"HotSearchMetrics\", this.searchView).subscribe();\r\n }\r\n else {\r\n // Per ogni grafico di ogni metrica aggiungo tutti i valori che sono DOPO all'ultimo ts registrato per quel grafico\r\n t.items.forEach(m => {\r\n m.values.forEach(c => {\r\n let refm = this.MetricsChartCache[this.metricKey(m, c)];\r\n if (refm) {\r\n c.series.forEach(s => { s.values = s.values.filter(v => this.dateExts.getDateConvertion(v.d).isAfter(refm.lastTs)); });\r\n if (c.series.some(t => t.values.length > 0)) {\r\n refm.lastTs = c.series.map(t => dayjs.max(t.values.map(v => this.dateExts.getDateConvertion(v.d))))[0];\r\n refm.chart.addData(c);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n this.searchView.searchinprogress = false;\r\n });\r\n }\r\n\r\n instanceSelected() {\r\n if (!this.selectedInstance)\r\n return;\r\n\r\n this.metricsToShow = this.searchView.items.filter(t => t.instance == this.selectedInstance);\r\n }\r\n\r\n linkChartToMetric(metric: Metric, metricChart: MetricChart, chartComp: BaseChartComponent) {\r\n 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] };\r\n }\r\n\r\n private metricKey(metric: Metric, value: MetricChart): string {\r\n return metric.name + \" - \" + value.xtitle + \" - \" + metric.instance;\r\n }\r\n\r\n // #region Gestione update automatico\r\n updateTimer: any;\r\n autoUpdateChanged() {\r\n if (!/^[1-9]\\d*$/.test(this.seconds))\r\n this.seconds = '10';\r\n const secondsInMs = parseInt(this.seconds, null) * 1000;\r\n if (this.autoUpdate) {\r\n this.sendSearch(false, true);\r\n this.updateTimer = setInterval(() => { this.sendSearch(false, true); }, secondsInMs);\r\n }\r\n else\r\n clearInterval(this.updateTimer);\r\n }\r\n // #endregion\r\n}","<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card app-overflow-visible\" widget>\r\n <div class=\"card-header\">\r\n <span class=\"text-uppercase\">\r\n {{'System Metrics' | localize : lc}}\r\n </span>\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <div class=\"col-md-12\">\r\n <form role=\"form\">\r\n <div class=\"row\">\r\n <div class=\"col-md-11\">\r\n <div class=\"col-md-12 row app-no-padding app-first-filter-line\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-datetime [Readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterfrom\" name=\"filterfrom\" [Placeholder]=\"'From' | localize : lc\" (inputChange)=\"dateChanged();\"></form-datetime>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-datetime [Readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterto\" name=\"filterto\" [Placeholder]=\"'To' | localize : lc\" (inputChange)=\"dateChanged();\"></form-datetime>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-input [Readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtersid\" name=\"filtersid\" [Placeholder]=\"'Session ID' | localize : lc\"></form-input>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-input [Readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterserial\" name=\"filterserial\" [Placeholder]=\"'Session Serial' | localize : lc\"></form-input>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 row app-no-padding\">\r\n <div class=\"col-12 app-filter-wrapper\">\r\n <form-multiselect [Readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtermetrics\" [IdField]=\"'name'\" [Display]=\"'{name}'\" name=\"filtermetrics\" [SelectLabel]=\"'Filter Metrics...' | localize : lc\" [Source]=\"Metrics\"></form-multiselect>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n <div class=\"col-md-1 app-no-padding\">\r\n <button [disabled]=\"searchView.searchinprogress || autoUpdate\" class=\"input-group-addon btn app-btn-search\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </form>\r\n <div class=\"app-col-12 app-margin-top-15\">\r\n <div class=\"pull-right\">\r\n {{'Update every' | localize : lc}}&nbsp;<input [readonly]=\"autoUpdate\" maxlength=\"3\" class=\"form-control app-updevery-input\" type=\"text\" [(ngModel)]=\"seconds\" />&nbsp;{{'second/s' | localize : lc}}\r\n </div>\r\n <div class=\"pull-right m-t-2 app-margin-right-5\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" [(ngModel)]=\"autoUpdate\" (ngModelChange)=\"autoUpdateChanged();\" />\r\n <div class=\"slider round\"></div>\r\n </label>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Loading Data' | localize : lc}}</em></p>\r\n <div *ngIf=\"searchView && instanceRequired\">\r\n <form-select [Validation]=\"false\" [Label]=\"'Metrics Instance' | localize : lc\" [(ngModel)]=\"selectedInstance\" name=\"instance\" [Source]=\"Instances\" (inputChange)=\"instanceSelected()\" required></form-select>\r\n </div>\r\n <div *ngIf=\"searchView && metricsToShow && metricsToShow.length > 0\">\r\n <div class=\"col-md-12 app-padding-right-0 row app-margin-top-15\">\r\n <ng-container *ngFor=\"let metric of metricsToShow; let i = index\">\r\n <div class=\"col-md-4 app-no-padding app-simple-border\" *ngFor=\"let chart of metric.values; let z = index\">\r\n <div style=\"width: 100%; height: 260px\">\r\n <es-line-chart [XTitle]=\"chart.xtitle\"\r\n [YTitle]=\"chart.ytitle\"\r\n [MinGridDistance]=\"65\"\r\n [Timeline]=\"false\"\r\n [LegendPadding]=\"{top: 0, bottom: 7, right: 0, left: 10}\"\r\n [MergeDatasets]=\"true\"\r\n [Data]=\"chart\"\r\n [Animations]=\"true\"\r\n [Legend]=\"chart.legend\"\r\n name=\"metric_{{i}}_chart_{{z}}\"\r\n (chartLoaded)=\"linkChartToMetric(metric, chart, $event);\"\r\n [DataGroupingThreshold]=\"99999999\">\r\n </es-line-chart>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","// Angular\r\nimport { Component, Inject } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { HTTPService } from \"@esfaenza/httpservice\";\r\n\r\n// Applicazione\r\nimport { BaseModuleCommunicationsConsumer } from \"../../communications/base/BaseModuleCommunicationsConsumer\";\r\nimport { ADM_BACKEND_URL } from \"../../tokens\";\r\nimport { Repository } from \"../../models/externals/Repository\";\r\n\r\n@Component({\r\n selector: \"adm_logs\",\r\n templateUrl: \"./adm_logs.component.html\"\r\n})\r\nexport class AdmLogsComponent {\r\n public Log: string;\r\n\r\n constructor(\r\n private _state: BaseModuleCommunicationsConsumer,\r\n private http: HTTPService,\r\n private lc: LocalizationService,\r\n private route: ActivatedRoute,\r\n @Inject(ADM_BACKEND_URL) private backend: string) {\r\n\r\n this._state.handleNavigation(this.lc.loc(this.route.snapshot.data[\"title\"]), false);\r\n }\r\n\r\n ngOnInit() {\r\n this.http.get<string>(this.backend + Repository[\"GET_Adm_GetServerLogs\"]).subscribe(t => { this.Log = t; });\r\n }\r\n}","<div class=\"row\">\r\n <div class=\"col-12 bottom-15\">\r\n <p *ngIf=\"Log\" class=\"app-whitespace-prewrap\" [innerHTML]=\"Log\"></p>\r\n </div>\r\n</div>","// Angular\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\nimport { NgModule } from \"@angular/core\";\nimport { RouterModule } from \"@angular/router\";\n\n// Material\nimport { MatIconModule } from '@angular/material/icon'\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDayjsDateModule } from \"@esfaenza/material-dayjs-adapter\";\nimport { MatInputModule } from \"@angular/material/input\";\n\n// Libs\nimport { NgxMatDatetimePickerModule } from '@angular-material-components/datetime-picker';\nimport { ModalModule } from \"ngx-bootstrap/modal\";\nimport { CsvModule } from \"@ctrl/ngx-csv\";\nimport { BsDropdownModule } from \"ngx-bootstrap/dropdown\";\nimport { TooltipModule } from \"ngx-bootstrap/tooltip\";\n\n// Esfaenza\nimport { EsTableModule } from \"@esfaenza/es-table\";\nimport { FormsAndValidationsModule } from \"@esfaenza/forms-and-validations\";\nimport { EsChartsModule } from \"@esfaenza/es-charts\";\nimport { EsGertrudeModule } from \"@esfaenza/gertrude\";\nimport { LocalizationModule } from \"@esfaenza/localizations\";\nimport { ContextMenuModule } from \"@esfaenza/ngx-contextmenu\";\n\n// Components\nimport { AdmAuditsComponent } from \"./components/audits/adm_audits.component\";\nimport { AdmWrkComponent } from \"./components/workers/adm_wrk.component\";\nimport { AdmProfilerComponent } from \"./components/profiler/adm_profiler.component\";\nimport { AdmTopActivitiesComponent } from \"./components/topact/topact_search.component\";\nimport { AdmEnqComponent } from \"./components/enqueues/adm_enq.component\";\nimport { AdmMetricsComponent } from \"./components/metrics/metrics_search.component\";\nimport { AdmLogsComponent } from \"./components/logs/adm_logs.component\";\n\nexport const routeConfig = [\n {\n path: \"\", children: [\n { path: \"serverworkers\", component: AdmWrkComponent, data: { title: \"Search Application Processes\", internalNavigation: false } },\n { path: \"profiler\", component: AdmProfilerComponent, data: { title: \"Server Profiler\", internalNavigation: false } },\n { path: \"topact\", component: AdmTopActivitiesComponent, data: { title: \"Top Activities\", internalNavigation: false } },\n { path: \"metrics\", component: AdmMetricsComponent, data: { title: \"System Metrics\", internalNavigation: false } },\n { path: \"serverlogs\", component: AdmLogsComponent, data: { title: \"Server Logs\", internalNavigation: false } },\n { path: \"serveraudits\", component: AdmAuditsComponent, data: { title: \"Search Application Audits\", internalNavigation: false } },\n { path: \"serverenqueues\", component: AdmEnqComponent, data: { title: \"Search Application Locks\", internalNavigation: false } },\n ]\n }\n];\n\nconst MODULES = [\n // Base\n CommonModule,\n FormsModule,\n\n // Material\n MatDatepickerModule,\n MatDayjsDateModule,\n MatIconModule,\n MatInputModule,\n\n // Bootstrap\n ModalModule,\n TooltipModule,\n BsDropdownModule,\n CsvModule,\n\n // Esfaenza e componenti visuali\n ContextMenuModule,\n LocalizationModule,\n EsTableModule,\n FormsAndValidationsModule,\n EsGertrudeModule,\n EsChartsModule,\n NgxMatDatetimePickerModule,\n\n RouterModule.forChild(routeConfig),\n];\n\nconst COMPONENTS = [\n AdmWrkComponent,\n AdmProfilerComponent,\n AdmTopActivitiesComponent,\n AdmLogsComponent,\n AdmAuditsComponent,\n AdmEnqComponent,\n AdmMetricsComponent\n];\n\n@NgModule({\n imports: [...MODULES],\n declarations: [...COMPONENTS]\n})\nexport class AdmModule { }","/*\n * Public API Surface of admin-module\n */\n\nexport * from './lib/admin-module.module';\nexport * from './lib/tokens';\nexport * from './lib/communications/base/BaseModuleCommunicationsConsumer';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-admin-module.mjs","sources":["../../../projects/admin-module/src/lib/models/components/AuditsView.ts","../../../projects/admin-module/src/lib/models/externals/Repository.ts","../../../projects/admin-module/src/lib/tokens.ts","../../../projects/admin-module/src/lib/components/audits/adm_audits.component.loc.ts","../../../projects/admin-module/src/lib/components/audits/adm_audits.component.ts","../../../projects/admin-module/src/lib/components/audits/adm_audits.component.html","../../../projects/admin-module/src/lib/models/components/ProcessesView.ts","../../../projects/admin-module/src/lib/components/workers/adm_wrk.component.loc.ts","../../../projects/admin-module/src/lib/components/workers/adm_wrk.component.ts","../../../projects/admin-module/src/lib/components/workers/adm_wrk.component.html","../../../projects/admin-module/src/lib/models/shared/Locale.ts","../../../projects/admin-module/src/lib/models/components/ProfilerDataNode.loc.ts","../../../projects/admin-module/src/lib/models/components/ProfilerDataNode.ts","../../../projects/admin-module/src/lib/models/components/ProfilerDataNodesView.ts","../../../projects/admin-module/src/lib/components/profiler/adm_profiler.component.loc.ts","../../../projects/admin-module/src/lib/components/profiler/adm_profiler.component.ts","../../../projects/admin-module/src/lib/components/profiler/adm_profiler.component.html","../../../projects/admin-module/src/lib/models/components/TopActivitiesDataView.ts","../../../projects/admin-module/src/lib/components/topact/topact_search.component.loc.ts","../../../projects/admin-module/src/lib/components/topact/topact_search.component.ts","../../../projects/admin-module/src/lib/components/topact/topact_search.component.html","../../../projects/admin-module/src/lib/models/components/LocksView.ts","../../../projects/admin-module/src/lib/components/enqueues/adm_enq.component.loc.ts","../../../projects/admin-module/src/lib/components/enqueues/adm_enq.component.ts","../../../projects/admin-module/src/lib/components/enqueues/adm_enq.component.html","../../../projects/admin-module/src/lib/models/shared/KeyValue.ts","../../../projects/admin-module/src/lib/models/components/MetricsView.ts","../../../projects/admin-module/src/lib/components/metrics/metrics_search.component.loc.ts","../../../projects/admin-module/src/lib/components/metrics/metrics_search.component.ts","../../../projects/admin-module/src/lib/components/metrics/metrics_search.component.html","../../../projects/admin-module/src/lib/components/logs/adm_logs.component.loc.ts","../../../projects/admin-module/src/lib/components/logs/adm_logs.component.ts","../../../projects/admin-module/src/lib/components/logs/adm_logs.component.html","../../../projects/admin-module/src/lib/admin-module-messages.ts","../../../projects/admin-module/src/lib/admin-module.comms.service.ts","../../../projects/admin-module/src/lib/admin-module.module.ts","../../../projects/admin-module/src/public-api.ts","../../../projects/admin-module/src/esfaenza-admin-module.ts"],"sourcesContent":["import { AppSearch } from \"@esfaenza/es-table\";\r\nimport { Audit } from \"./Audit\";\r\n\r\nexport class AuditsView extends AppSearch<Audit> {\r\n constructor() {\r\n super();\r\n this.filteraction = '';\r\n this.filterhttp = '';\r\n }\r\n\r\n filterda: string;\r\n filtera: string;\r\n filteruser: string;\r\n filterroute: string;\r\n filteraction: string;\r\n filteraddress: string;\r\n filterhttp: string;\r\n filterargs: string;\r\n filterobjid: string;\r\n filterobjtype: string;\r\n filterconversationid: string;\r\n}","export const Repository = {\r\n GET_Adm_ChangeProcessConsumerGroup: \"/api/Adm/ChangeProcessConsumerGroup\",\r\n GET_Adm_ClearAllCaches: \"/api/Adm/ClearAllCaches\",\r\n GET_Adm_GetConsumerGroups: \"/api/Adm/GetConsumerGroups#cache\",\r\n GET_Adm_GetInfos: \"/api/Adm/GetInfos\",\r\n GET_Adm_GetMetrics: \"/api/Adm/GetMetrics\",\r\n POST_Adm_GetMetrics: \"/api/Adm/GetMetrics\",\r\n POST_Adm_GetProfilerDataNodes: \"/api/Adm/GetProfilerDataNodes\",\r\n POST_Adm_GetServerAudits: \"/api/Adm/GetServerAudits\",\r\n POST_Adm_GetServerLocks: \"/api/Adm/GetServerLocks\",\r\n GET_Adm_GetServerLogs: \"/api/Adm/GetServerLogs\",\r\n POST_Adm_GetServerWorkers: \"/api/Adm/GetServerWorkers\",\r\n POST_Adm_GetTopActivities: \"/api/Adm/GetTopActivities\",\r\n GET_Adm_GetWorkerStatus: \"/api/Adm/GetWorkerStatus\",\r\n GET_Adm_InvalidateServerSideCache: \"/api/Adm/InvalidateServerSideCache\",\r\n GET_Adm_KillProcess: \"/api/Adm/KillProcess\",\r\n GET_Adm_SetProcessTracing: \"/api/Adm/SetProcessTracing\",\r\n GET_Adm_StartWorker: \"/api/Adm/StartWorker\",\r\n GET_Adm_StopWorker: \"/api/Adm/StopWorker\"\r\n}","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport const ADM_LOCALE: InjectionToken<string> = new InjectionToken<string>('ADM_LOCALE');\r\nexport const ADM_BACKEND_URL: InjectionToken<string> = new InjectionToken<string>('ADM_BACKEND_URL');\r\nexport const ADM_MODULE_PATH: InjectionToken<string> = new InjectionToken<string>('ADM_MODULE_PATH');\r\nexport const ADM_CONVERSATIONS: InjectionToken<boolean> = new InjectionToken<boolean>('ADM_CONVERSATIONS');","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\nimport { ADM_LOCALE } from \"../../tokens\";\r\n\r\n@Injectable()\r\nexport class AdmAuditLoc extends LocalizationService {\r\n constructor(@Inject(ADM_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n\r\n super.set(\"en->it\", \"Search Application Audits\", [\"Ricerca Audit Applicativi\"]);\r\n super.set(\"en->it\", \"User\", [\"Utente\"]);\r\n super.set(\"en->it\", \"REST Call\", [\"Chiamata REST\"]);\r\n super.set(\"en->it\", \"Update\", [\"Aggiornamento\"]);\r\n super.set(\"en->it\", \"Route\", [\"Route\"]);\r\n super.set(\"en->it\", \"Action\", [\"Azione\"]);\r\n super.set(\"en->it\", \"HTTP Method\", [\"Metodo HTTP\"]);\r\n super.set(\"en->it\", \"Arguments\", [\"Argomenti\"]);\r\n super.set(\"en->it\", \"Object ID\", [\"ID Oggetto\"]);\r\n super.set(\"en->it\", \"Object Type\", [\"Tipo Oggetto\"]);\r\n super.set(\"en->it\", \"Object Data\", [\"Dati Oggetto\"]);\r\n super.set(\"en->it\", \"Loading Application Audits\", [\"Carico gli Audit dell'Applicazione\"]);\r\n super.set(\"en->it\", \"Date\", [\"Data\"]);\r\n super.set(\"en->it\", \"Address\", [\"Indirizzo\"]);\r\n super.set(\"en->it\", \"HTTP Response\", [\"Risposta HTTP\"]);\r\n super.set(\"en->it\", \"Application Error Code\", [\"Codice Errore Applicativo\"]);\r\n super.set(\"en->it\", \"Conversation ID\", [\"Cod. Conversation\"]);\r\n }\r\n}","// Angular\r\nimport { Component, Inject } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { Location } from \"@angular/common\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PreferencesService } from \"@esfaenza/preferences\";\r\nimport { HTTPService } from \"@esfaenza/httpservice\";\r\nimport { InterComService, InboundMessageTypes } from \"@esfaenza/extensions\";\r\n\r\n// Applicazione\r\nimport { AuditsView } from \"../../models/components/AuditsView\";\r\nimport { KeyValue } from \"../../models/shared/KeyValue\";\r\nimport { Repository } from \"../../models/externals/Repository\";\r\nimport { ADM_BACKEND_URL, ADM_MODULE_PATH, ADM_CONVERSATIONS } from \"../../tokens\";\r\n\r\n// Localizzazione\r\nimport { AdmAuditLoc } from \"./adm_audits.component.loc\";\r\n\r\n@Component({\r\n selector: \"adm_audits\",\r\n viewProviders: [{ provide: LocalizationService, useClass: AdmAuditLoc }],\r\n templateUrl: \"./adm_audits.component.html\"\r\n})\r\nexport class AdmAuditsComponent {\r\n\r\n public searchView: AuditsView = new AuditsView();\r\n public Actions: KeyValue[] = [];\r\n public HttpMethods: KeyValue[] = [];\r\n public searchInProgress: boolean = false;\r\n public storageSub: any;\r\n\r\n constructor(\r\n public lc: LocalizationService,\r\n private intercom: InterComService,\r\n private localStorage: PreferencesService,\r\n private http: HTTPService,\r\n private route: ActivatedRoute,\r\n private location: Location,\r\n @Inject(ADM_BACKEND_URL) private backend: string,\r\n @Inject(ADM_MODULE_PATH) private mod: string,\r\n @Inject(ADM_CONVERSATIONS) public usesConversations: boolean) {\r\n\r\n this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data[\"title\"]) });\r\n\r\n this.HttpMethods = [\r\n { id: \"GET\", description: \"GET\" },\r\n { id: \"POST\", description: \"POST\" },\r\n { id: \"PUT\", description: \"PUT\" },\r\n { id: \"PATCH\", description: \"PATCH\" },\r\n { id: \"DELETE\", description: \"DELETE\" }\r\n ];\r\n\r\n this.Actions = [\r\n { id: \"C\", description: this.lc.loc(\"REST Call\") },\r\n { id: \"U\", description: this.lc.loc(\"Update\") },\r\n { id: \"D\", description: this.lc.loc(\"Delete\") }\r\n ];\r\n }\r\n\r\n ngOnInit() {\r\n this.storageSub = this.route.queryParams.subscribe(params => { this.Init(params[\"ignoreStorage\"]); });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.storageSub)\r\n this.storageSub.unsubscribe();\r\n }\r\n\r\n async Init(ignoreStorage) {\r\n let item = await this.localStorage.getItem<AuditsView>(\"HotAudittato\").toPromise();\r\n if (!ignoreStorage && item) {\r\n this.init(item);\r\n } else {\r\n this.init(null);\r\n this.location.replaceState(`/pages/${this.mod}/serveraudits`);\r\n this.route.snapshot.queryParams = [];\r\n await this.localStorage.removeItem(\"HotAudittato\").toPromise();\r\n }\r\n }\r\n\r\n init(HotPotato: AuditsView) {\r\n //Se ho la HotPotato vuol dire che sono appena tornato dall'edit/nuovo. Rifaccio la ricerca in base ai filtri precedenti\r\n //Altirmenti genero il modello nuovo normalmente\r\n if (HotPotato) {\r\n this.searchView = HotPotato;\r\n this.POSTGetProcesses(this.backend + Repository[\"POST_Adm_GetServerAudits\"], this.searchView);\r\n }\r\n else {\r\n this.searchView = new AuditsView();\r\n this.searchView.filterda = dayjs().add(-1, \"month\").format(this.lc.token(\"getSmallDateFormat\"));\r\n this.searchView.filtera = dayjs().format(this.lc.token(\"getSmallDateFormat\"));\r\n this.sendSearch();\r\n }\r\n }\r\n\r\n sendSearch(resetPage: boolean = true) {\r\n this.searchInProgress = true;\r\n if (resetPage)\r\n this.searchView.page = 1;\r\n\r\n this.POSTGetProcesses(this.backend + Repository[\"POST_Adm_GetServerAudits\"], this.searchView);\r\n }\r\n\r\n POSTGetProcesses(url: string, data: AuditsView) {\r\n this.http.post<AuditsView>(url, data).subscribe(t => {\r\n this.searchView = t;\r\n this.searchInProgress = false;\r\n this.localStorage.setItem(\"HotAudittato\", this.searchView).subscribe();\r\n });\r\n }\r\n}","<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\">{{'Search Application Audits' | 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]=\"'From' | localize : lc\"></form-date>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtera\" name=\"filtera\" [Placeholder]=\"'To' | 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]=\"'User' | 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]=\"'Address' | 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\" [SelectLabel]=\"'Action' | 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\" [SelectLabel]=\"'HTTP Method' | 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]=\"'Arguments' | 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]=\"'Object ID' | localize : lc\"></form-input>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-input [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterobjtype\" name=\"filterobjtype\" [Placeholder]=\"'Object Type' | 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]=\"'Conversation ID' | 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>{{'Loading Application Audits' | 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'\">{{'Date' | localize : lc}}</span>\r\n <span *th=\"'User'\">{{'User' | localize : lc}}</span>\r\n <span *th=\"'RemoteAddress'\">{{'Address' | localize : lc}}</span>\r\n <span *th=\"'Action'\">{{'Action' | localize : lc}}</span>\r\n <span *th=\"'HttpMethod'\">{{'HTTP Method' | localize : lc}}</span>\r\n <span *th=\"'Route'\">{{'Route' | localize : lc}}</span>\r\n <span *th=\"'Args'\">{{'Arguments' | localize : lc}}</span>\r\n <span *th=\"'HttpResponse'\">{{'HTTP Response' | localize : lc}}</span>\r\n <span *th=\"'NonStdErrorMessage'\">{{'Application Error Code' | localize : lc}}</span>\r\n <span *th=\"'ConvId'; If: usesConversations\">{{'Conversation ID' | localize : lc}}</span>\r\n <span *th=\"'ObjectType'\">{{'Object Type' | localize : lc}}</span>\r\n <span *th=\"'ObjectId'\">{{'Object ID' | localize : lc}}</span>\r\n <span *th=\"'ObjectData'\">{{'Object Data' | 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>","import { AppSearch, GenericItem } from \"@esfaenza/es-table\";\r\n\r\nexport class ProcessesView extends AppSearch<GenericItem> {\r\n constructor() { super(); }\r\n\r\n filtertenant: string;\r\n filteruser: string;\r\n filterstate: string;\r\n filterglobal: boolean;\r\n}","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\nimport { ADM_LOCALE } from \"../../tokens\";\r\n\r\n@Injectable()\r\nexport class AdmWrkLoc extends LocalizationService {\r\n constructor(@Inject(ADM_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n\r\n super.set(\"en->it\", \"Consumer Group succesfully changed\", [\"Gruppo di Consumo modificato con successo\"]);\r\n super.set(\"en->it\", \"Errors changing Consumer Group\", [\"Errori nella modifica del Gruppo di Consumo\"]);\r\n super.set(\"en->it\", \"Change Consumer Group\", [\"Modifica Gruppo di Consumo\"]);\r\n super.set(\"en->it\", \"New Consumer Group\", [\"Nuovo Gruppo di Consumo\"]);\r\n\r\n super.set(\"en->it\", \"State\", [\"Stato\"]);\r\n super.set(\"en->it\", \"Global\", [\"Globale\"]);\r\n super.set(\"en->it\", \"Search Application Processes\", [\"Ricerca Processi Applicativi\"]);\r\n super.set(\"en->it\", \"Tenant\", [\"Operatore\"]);\r\n super.set(\"en->it\", \"Errors toggling Process Tracing\", [\"Errori nella modifica del Tracing del Processo\"]);\r\n super.set(\"en->it\", \"User\", [\"Utente\"]);\r\n super.set(\"en->it\", \"Loading Application Processes\", [\"Carico i Processi Applicativi\"]);\r\n super.set(\"en->it\", \"Activate Process Tracing\", [\"Attiva Tracing Processo\"]);\r\n super.set(\"en->it\", \"Deactivate Process Tracing\", [\"Disattiva Tracing Progetto\"]);\r\n super.set(\"en->it\", \"Kill Process\", [\"Ammazza Processo\"]);\r\n super.set(\"en->it\", \"Errors killing the Process\", [\"Errori durante la Kill del Processo\"]);\r\n super.set(\"en->it\", \"Process succesfully killed\", [\"Processo ucciso con successo\"]);\r\n super.set(\"en->it\", \"Confirm Process Kill\", [\"Conferma Terminazione del Processo\"]);\r\n super.set(\"en->it\", \"Are you sure you wish to kill the selected process? The associated user will be disconnected\", [\"Sei sicuro di voler Terminare il processo selezionato? L'utente relativo sara' disconnesso\"]);\r\n }\r\n}","// Angular\r\nimport { Component, Inject, ViewChild } from \"@angular/core\";\r\nimport { HttpParams } from \"@angular/common/http\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { Location } from \"@angular/common\";\r\nimport { NgForm } from \"@angular/forms\";\r\n\r\n// Configurazioni\r\nimport { InboundMessageTypes, InterComService, MessageService, UtilityService } from \"@esfaenza/extensions\";\r\nimport { EsTableOperationDefinition } from \"@esfaenza/es-table\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PreferencesService } from \"@esfaenza/preferences\";\r\nimport { HTTPService } from \"@esfaenza/httpservice\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { ModalDirective } from \"ngx-bootstrap/modal\";\r\n\r\n// Applicazione\r\nimport { KeyValue } from \"../../models/shared/KeyValue\";\r\nimport { ProcessesView } from \"../../models/components/ProcessesView\";\r\nimport { Repository } from \"../../models/externals/Repository\";\r\nimport { ADM_BACKEND_URL, ADM_MODULE_PATH } from \"../../tokens\";\r\n\r\n// Localizzazione\r\nimport { AdmWrkLoc } from \"./adm_wrk.component.loc\";\r\n\r\n@Component({\r\n selector: \"adm_wrk\",\r\n viewProviders: [{ provide: LocalizationService, useClass: AdmWrkLoc }],\r\n templateUrl: \"./adm_wrk.component.html\"\r\n})\r\nexport class AdmWrkComponent {\r\n\r\n public searchView: ProcessesView = new ProcessesView();\r\n public DynamicOps: EsTableOperationDefinition[] = [];\r\n public storageSub: any;\r\n public valueToShow: string = \"\";\r\n\r\n constructor(\r\n private utiExts: UtilityService,\r\n private msgExts: MessageService,\r\n public lc: LocalizationService,\r\n private localStorage: PreferencesService,\r\n private intercom: InterComService,\r\n private http: HTTPService,\r\n private route: ActivatedRoute,\r\n private location: Location,\r\n @Inject(ADM_BACKEND_URL) private backend: string,\r\n @Inject(ADM_MODULE_PATH) private mod: string) {\r\n\r\n this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data[\"title\"]) });\r\n\r\n this.DynamicOps = [\r\n new EsTableOperationDefinition(\"trace_on\", this.lc.loc(\"Activate Process Tracing\"), \"fa fa-circle text-danger\", \"\", \"trace_enabled\", \"N\"),\r\n new EsTableOperationDefinition(\"trace_off\", this.lc.loc(\"Deactivate Process Tracing\"), \"fa fa-circle text-success\", \"\", \"trace_enabled\", \"Y\"),\r\n new EsTableOperationDefinition(\"kill\", this.lc.loc(\"Kill Process\"), \"fa fa-ban text-danger\"),\r\n new EsTableOperationDefinition(\"change_cg\", this.lc.loc(\"Change Consumer Group\"), \"fa fa-edit text-info\")\r\n ];\r\n }\r\n\r\n ngOnInit() {\r\n this.storageSub = this.route.queryParams.subscribe(params => {\r\n this.Init(params[\"ignoreStorage\"]);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.storageSub)\r\n this.storageSub.unsubscribe();\r\n }\r\n\r\n async Init(ignoreStorage) {\r\n let item = await this.localStorage.getItem<ProcessesView>(\"HotProcessato\").toPromise();\r\n if (!ignoreStorage && item) {\r\n this.init(item);\r\n } else {\r\n this.init(null);\r\n this.location.replaceState(`/pages/${this.mod}/serverworkers`);\r\n this.route.snapshot.queryParams = [];\r\n await this.localStorage.removeItem(\"HotProcessato\").toPromise();\r\n }\r\n }\r\n\r\n init(HotPotato: ProcessesView) {\r\n if (HotPotato) {\r\n this.searchView = HotPotato;\r\n this.POSTGetProcesses(this.backend + Repository[\"POST_Adm_GetServerWorkers\"], this.searchView);\r\n }\r\n else {\r\n this.searchView = new ProcessesView();\r\n this.sendSearch();\r\n }\r\n }\r\n\r\n sendSearch(resetPage: boolean = true) {\r\n this.searchView.searchinprogress = true;\r\n if (resetPage)\r\n this.searchView.page = 1;\r\n\r\n this.POSTGetProcesses(this.backend + Repository[\"POST_Adm_GetServerWorkers\"], this.searchView);\r\n }\r\n\r\n POSTGetProcesses(url: string, data: ProcessesView) {\r\n this.http.post<ProcessesView>(url, data).subscribe(t => {\r\n this.searchView = t;\r\n this.searchView.searchinprogress = false;\r\n this.localStorage.setItem(\"HotProcessato\", this.searchView).subscribe();\r\n });\r\n }\r\n\r\n back() {\r\n this.location.back();\r\n }\r\n\r\n onOperation(event: { id: string, item: any }) {\r\n switch (event.id) {\r\n case \"trace_on\": this.toggleTracing(event.item, true); break;\r\n case \"trace_off\": this.toggleTracing(event.item, false); break;\r\n case \"kill\": this.killProcess(event.item); break;\r\n case \"change_cg\": this.changeProcessCg(event.item); break;\r\n }\r\n }\r\n\r\n toggleTracing(process: any, tracing: boolean) {\r\n var pars = new HttpParams()\r\n .set(\"instanceid\", process.properties[\"inst_id\"])\r\n .set(\"sid\", process.properties[\"sid\"])\r\n .set(\"serial\", process.properties[\"serial\"])\r\n .set(\"enable\", tracing.toString());\r\n this.http.get<string>(this.backend + Repository[\"GET_Adm_SetProcessTracing\"], pars).subscribe(t => {\r\n this.msgExts.manageStringResponse(t, \"\", this.lc.loc(\"Errors toggling Process Tracing\"), () => this.sendSearch());\r\n });\r\n }\r\n\r\n killProcess(process: any) {\r\n this.msgExts.simpleWarningWithChoice(\r\n this.lc.loc(\"Confirm Process Kill\"),\r\n this.lc.loc(\"Are you sure you wish to kill the selected process? The associated user will be disconnected\"),\r\n () => {\r\n var pars = new HttpParams()\r\n .set(\"instanceid\", process.properties[\"inst_id\"])\r\n .set(\"sid\", process.properties[\"sid\"])\r\n .set(\"serial\", process.properties[\"serial\"]);\r\n this.http.get<string>(this.backend + Repository[\"GET_Adm_KillProcess\"], pars).subscribe(t => {\r\n this.msgExts.manageStringResponse(t, this.lc.loc(\"Process succesfully killed\"), this.lc.loc(\"Errors killing the Process\"), () => this.sendSearch());\r\n });\r\n });\r\n }\r\n\r\n //********************************************** Gestione modifica Consumer Group ***************************************\r\n\r\n newCg: string = \"\";\r\n CGs: KeyValue[] = [];\r\n CgDictionariesLoaded: boolean = false;\r\n ProcessOnEdit: any;\r\n\r\n @ViewChild(\"cgFrom\") cgFrom: NgForm;\r\n @ViewChild(\"dlgChangeCg\") dlgChangeCg: ModalDirective;\r\n\r\n changeProcessCg(process: any) {\r\n this.ProcessOnEdit = process;\r\n if (!this.CgDictionariesLoaded) {\r\n this.loadCgDictionaries();\r\n this.CgDictionariesLoaded = true;\r\n }\r\n this.setupChangeCg();\r\n this.dlgChangeCg.show();\r\n }\r\n\r\n loadCgDictionaries() {\r\n this.http.get<KeyValue[]>(this.backend + Repository[\"GET_Adm_GetConsumerGroups\"]).subscribe(t => this.CGs = t);\r\n }\r\n\r\n setupChangeCg() {\r\n this.utiExts.cleanForm(this.cgFrom)\r\n setTimeout(() => { this.newCg = \"\" });\r\n }\r\n\r\n doChangeCg() {\r\n var pars = new HttpParams()\r\n .set(\"instanceid\", this.ProcessOnEdit.properties[\"inst_id\"])\r\n .set(\"sid\", this.ProcessOnEdit.properties[\"sid\"])\r\n .set(\"serial\", this.ProcessOnEdit.properties[\"serial\"])\r\n .set(\"consumer_group\", this.newCg);\r\n this.http.get<string>(this.backend + Repository[\"GET_Adm_ChangeProcessConsumerGroup\"], pars).subscribe(t => {\r\n this.msgExts.manageStringResponse(t, this.lc.loc(\"Consumer Group succesfully changed\"), this.lc.loc(\"Errors changing Consumer Group\"), () => this.sendSearch());\r\n });\r\n\r\n return true;\r\n }\r\n}","<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\">{{'Search Application Processes' | localize : lc}}</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 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)]=\"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]=\"'User' | 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.filterstate\" name=\"filterState\" [Placeholder]=\"'State' | localize : lc\"></form-input>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper app-padding-top-10\">\r\n <form-checkbox [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterglobal\" name=\"filterglobal\"></form-checkbox>&nbsp;\r\n <span class=\"app-pointer\" (click)=\"searchView.filterglobal = !searchView.filterglobal\">{{'Global' | localize : lc}}</span>\r\n </div>\r\n <button [disabled]=\"searchView.searchinprogress\" class=\"input-group-addon btn app-btn-search app-margin-top-20\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Loading Application Processes' | localize : lc}}...</em></p>\r\n <div *ngIf=\"searchView\">\r\n <es-table [(ngModel)]=\"searchView\" [DynamicOperations]=\"DynamicOps\" [AutoUpdate]=\"true\" [OrderByColumn]=\"true\" (onSearchRequest)=\"sendSearch($event);\" (onDynamicOperation)=\"onOperation($event)\">\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()\">{{'Back' | 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\" cdkDrag>\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\" cdkDragHandle>\r\n <h4 class=\"modal-title pull-left\">{{'Change Consumer Group' | 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]=\"'New Consumer Group' | 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()\">{{'Close' | localize : lc}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary\">{{'Confirm' | 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>","export const Locale: string = localStorage.getItem(\"LOCALE\") || myconfig.LOCALE;","export const ProfilerDataNode_loc = {\r\n 'Parent ID': { 'en-US': \"Parent ID\", 'it-IT': \"ID Padre\" },\r\n 'ID': { 'en-US': \"ID\", 'it-IT': \"ID\" },\r\n 'Description': { 'en-US': \"Description\", 'it-IT': \"Descrizione\" },\r\n 'Calls': { 'en-US': \"Calls\", 'it-IT': \"Chiamate\" },\r\n 'Time': { 'en-US': \"Time\", 'it-IT': \"Tempo\" },\r\n 'Peak Time': { 'en-US': \"Peak Time\", 'it-IT': \"Tempo Max\" },\r\n 'Min. Time': { 'en-US': \"Min. Time\", 'it-IT': \"Tempo Min\" },\r\n 'Avg. Time': { 'en-US': \"Avg. Time\", 'it-IT': \"Tempo Medio\" },\r\n 'Specific Time': { 'en-US': \"Specific Time\", 'it-IT': \"Tempo Specifico\" },\r\n 'Percentage': { 'en-US': \"Percentage\", 'it-IT': \"Percentuale\" },\r\n 'Calls for Period': { 'en-US': \"Calls for Period\", 'it-IT': \"Chiamate Periodo\" },\r\n 'Time for Period': { 'en-US': \"Time for Period\", 'it-IT': \"Tempo Periodo\" },\r\n 'Peak Time for Period': { 'en-US': \"Peak Time for Period\", 'it-IT': \"Tempo Max Periodo\" },\r\n 'Min. Time for Period': { 'en-US': \"Min. Time for Period\", 'it-IT': \"Tempo Min Periodo\" },\r\n 'Avg. Time for Period': { 'en-US': \"Avg. Time for Period\", 'it-IT': \"Tempo Medio Periodo\" },\r\n 'Specific Time for Period': { 'en-US': \"Specific Time for Period\", 'it-IT': \"Tempo Specifico Periodo\" },\r\n 'Percentage for Period': { 'en-US': \"Percentage for Period\", 'it-IT': \"Percentuale Periodo\" }\r\n}","import { autoserialize } from \"cerialize\";\r\nimport { Export } from \"@esfaenza/extensions\";\r\n\r\nimport { Locale } from \"../shared/Locale\";\r\nimport { ProfilerDataNode_loc } from \"./ProfilerDataNode.loc\";\r\n\r\nexport class ProfilerDataNode {\r\n @Export(10, ProfilerDataNode_loc[\"Parent ID\"][Locale])\r\n @autoserialize parentid: string;\r\n @Export(20, ProfilerDataNode_loc[\"ID\"][Locale])\r\n @autoserialize id: string;\r\n @Export(30, ProfilerDataNode_loc[\"Description\"][Locale])\r\n @autoserialize description: string;\r\n @Export(40, ProfilerDataNode_loc[\"Calls\"][Locale])\r\n @autoserialize calls: number;\r\n @Export(50, ProfilerDataNode_loc[\"Time\"][Locale])\r\n @autoserialize time: number;\r\n @Export(60, ProfilerDataNode_loc[\"Peak Time\"][Locale])\r\n @autoserialize peaktime: number;\r\n @Export(70, ProfilerDataNode_loc[\"Min. Time\"][Locale])\r\n @autoserialize mintime: number;\r\n @Export(80, ProfilerDataNode_loc[\"Avg. Time\"][Locale])\r\n @autoserialize avgtime: number;\r\n @Export(90, ProfilerDataNode_loc[\"Specific Time\"][Locale])\r\n @autoserialize timewithoutchildren: number;\r\n @Export(100, ProfilerDataNode_loc[\"Percentage\"][Locale])\r\n @autoserialize percentage: number;\r\n @Export(110, ProfilerDataNode_loc[\"Calls for Period\"][Locale])\r\n @autoserialize snapdeltacalls: number;\r\n @Export(120, ProfilerDataNode_loc[\"Time for Period\"][Locale])\r\n @autoserialize snapdeltatime: number;\r\n @Export(130, ProfilerDataNode_loc[\"Peak Time for Period\"][Locale])\r\n @autoserialize snappeaktime: number;\r\n @Export(140, ProfilerDataNode_loc[\"Min. Time for Period\"][Locale])\r\n @autoserialize snapmintime: number;\r\n @Export(150, ProfilerDataNode_loc[\"Avg. Time for Period\"][Locale])\r\n @autoserialize snapavgtime: number;\r\n @Export(160, ProfilerDataNode_loc[\"Specific Time for Period\"][Locale])\r\n @autoserialize snaptimewithoutchildren: number;\r\n @Export(170, ProfilerDataNode_loc[\"Percentage for Period\"][Locale])\r\n @autoserialize snappercentage: number;\r\n}","import { AppSearch } from \"@esfaenza/es-table\";\r\nimport { ProfilerDataNode } from \"./ProfilerDataNode\";\r\n\r\nexport class ProfilerDataNodesView extends AppSearch<ProfilerDataNode>{\r\n constructor() { super(); }\r\n\r\n filterfrom: string;\r\n filterto: string;\r\n}","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\nimport { ADM_LOCALE } from \"../../tokens\";\r\n\r\n@Injectable()\r\nexport class AdmProfilerComponentLoc extends LocalizationService {\r\n constructor(@Inject(ADM_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n\r\n super.set(\"en->it\", \"Server Profiler\", [\"Profiler del Server\"]);\r\n super.set(\"en->it\", \"Loading Data\", [\"Carico i Dati\"]);\r\n super.set(\"en->it\", \"ID\", [\"ID\"]);\r\n super.set(\"en->it\", \"Description\", [\"Descrizione\"]);\r\n super.set(\"en->it\", \"Calls\", [\"Chiamate\"]);\r\n super.set(\"en->it\", \"Time\", [\"Tempo\"]);\r\n super.set(\"en->it\", \"Peak Time\", [\"Tempo Max\"]);\r\n super.set(\"en->it\", \"Min. Time\", [\"Tempo Min\"]);\r\n super.set(\"en->it\", \"Avg. Time\", [\"Tempo Medio\"]);\r\n super.set(\"en->it\", \"Specific Time\", [\"Tempo Specifico\"]);\r\n super.set(\"en->it\", \"Percentage\", [\"Percentuale\"]);\r\n super.set(\"en->it\", \"Calls for Period\", [\"Chiamate Periodo\"]);\r\n super.set(\"en->it\", \"Time for Period\", [\"Tempo Periodo\"]);\r\n super.set(\"en->it\", \"Peak Time for Period\", [\"Tempo Max Periodo\"]);\r\n super.set(\"en->it\", \"Min. Time for Period\", [\"Tempo Min Periodo\"]);\r\n super.set(\"en->it\", \"Avg. Time for Period\", [\"Tempo Medio Periodo\"]);\r\n super.set(\"en->it\", \"Specific Time for Period\", [\"Tempo Specifico Periodo\"]);\r\n super.set(\"en->it\", \"Percentage for Period\", [\"Percentuale Periodo\"]);\r\n }\r\n}","// Angular\r\nimport { Component, Inject } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { Location } from \"@angular/common\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PreferencesService } from \"@esfaenza/preferences\";\r\nimport { ExportService, InboundMessageTypes, InterComService } from \"@esfaenza/extensions\";\r\nimport { HTTPService } from \"@esfaenza/httpservice\";\r\n\r\n// Applicazione\r\nimport { ProfilerDataNode } from \"../../models/components/ProfilerDataNode\";\r\nimport { ProfilerDataNodesView } from \"../../models/components/ProfilerDataNodesView\";\r\nimport { Repository } from \"../../models/externals/Repository\";\r\nimport { ADM_BACKEND_URL, ADM_MODULE_PATH } from \"../../tokens\";\r\n\r\n// Localizzazione\r\nimport { AdmProfilerComponentLoc } from \"./adm_profiler.component.loc\";\r\n\r\n@Component({\r\n selector: \"adm_profiler\",\r\n providers: [{ provide: LocalizationService, useClass: AdmProfilerComponentLoc }],\r\n templateUrl: \"./adm_profiler.component.html\"\r\n})\r\nexport class AdmProfilerComponent {\r\n public searchView: ProfilerDataNodesView = new ProfilerDataNodesView();\r\n public storageSub: any;\r\n\r\n constructor(\r\n private expExts: ExportService,\r\n public lc: LocalizationService,\r\n private localStorage: PreferencesService,\r\n private location: Location,\r\n private intercom: InterComService,\r\n private http: HTTPService,\r\n private route: ActivatedRoute,\r\n @Inject(ADM_BACKEND_URL) private backend: string,\r\n @Inject(ADM_MODULE_PATH) private mod: string) {\r\n\r\n this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data[\"title\"]) });\r\n }\r\n\r\n ngOnInit() {\r\n this.storageSub = this.route.queryParams.subscribe(params => {\r\n this.Init(params[\"ignoreStorage\"]);\r\n });\r\n }\r\n\r\n Init(ignoreStore) {\r\n this.doInit(ignoreStore);\r\n }\r\n\r\n async doInit(ignoreStorage) {\r\n let item = await this.localStorage.getItem<ProfilerDataNodesView>(\"HotSearchProfilato\").toPromise();\r\n if (!ignoreStorage && item) {\r\n this.init(item);\r\n } else {\r\n this.init(null);\r\n this.location.replaceState(`/pages/${this.mod}/profiler`);\r\n this.route.snapshot.queryParams = [];\r\n await this.localStorage.removeItem(\"HotSearchProfilato\").toPromise();\r\n }\r\n }\r\n\r\n init(HotPotato: ProfilerDataNodesView) {\r\n if (HotPotato) {\r\n this.searchView = HotPotato;\r\n this.POSTGetItems(this.backend + Repository[\"POST_Adm_GetProfilerDataNodes\"], this.searchView);\r\n }\r\n else {\r\n this.searchView = new ProfilerDataNodesView();\r\n this.sendSearch();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.storageSub)\r\n this.storageSub.unsubscribe();\r\n }\r\n\r\n sendSearch(resetPage: boolean = true) {\r\n this.searchView.searchinprogress = true;\r\n if (resetPage)\r\n this.searchView.page = 1;\r\n\r\n this.POSTGetItems(this.backend + Repository[\"POST_Adm_GetProfilerDataNodes\"], this.searchView);\r\n }\r\n\r\n POSTGetItems(url: string, data: ProfilerDataNodesView) {\r\n this.http.post<ProfilerDataNodesView>(url, data).subscribe(t => {\r\n this.searchView = t;\r\n this.searchView.searchinprogress = false;\r\n this.localStorage.setItem(\"HotSearchProfilato\", this.searchView).subscribe();\r\n });\r\n }\r\n\r\n prepareExport(dataCallBack) {\r\n var view = JSON.parse(JSON.stringify(this.searchView));\r\n view.page = 1;\r\n view.itemsperpageoverride = 9999999;\r\n this.http.post<ProfilerDataNodesView>(this.backend + Repository[\"POST_Adm_GetProfilerDataNodes\"], view).subscribe(t => {\r\n let items: ProfilerDataNode[] = this.expExts.deserializeForExport(t.items, ProfilerDataNode);\r\n dataCallBack(items);\r\n });\r\n }\r\n}","<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card app-overflow-visible\" widget>\r\n <div class=\"card-header\">\r\n <span class=\"text-uppercase\">{{'Server Profiler' | localize : lc}}</span>&nbsp;\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <div class=\"col-md-12 bottom-15\">\r\n <form role=\"form\">\r\n <div class=\"row app-first-filter-line\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterfrom\" name=\"filterfrom\" [Placeholder]=\"'From' | localize : lc\"></form-date>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-date [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterto\" name=\"filterto\" [Placeholder]=\"'To' | localize : lc\"></form-date>\r\n </div>\r\n <button [disabled]=\"searchView.searchinprogress\" class=\"input-group-addon btn app-btn-search app-margin-top-20\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Loading Data' | localize : lc}}</em></p>\r\n <div *ngIf=\"searchView\">\r\n <es-table [(ngModel)]=\"searchView\" [Hierarchy]=\"true\" [OrderByColumn]=\"false\" [ParentKey]=\"'parentid'\"\r\n [OwnKey]=\"'id'\" [StartsExpanded]=\"false\" [ExportFunction]=\"prepareExport.bind(this)\" [Export]=\"true\"\r\n [ExportFileName]=\"'Profiler Export.csv'\" [HidePaging]=\"true\" (onSearchRequest)=\"sendSearch($event);\">\r\n \r\n <span *th=\"'1'\">{{'ID' | localize : lc}}</span>\r\n <span *th=\"'2'\">{{'Description' | localize : lc}}</span>\r\n <span *th=\"'3'\">{{'Calls' | localize : lc}}</span>\r\n <span *th=\"'4'\">{{'Time' | localize : lc}}</span>\r\n <span *th=\"'5'\">{{'Peak Time' | localize : lc}}</span>\r\n <span *th=\"'6'\">{{'Min. Time' | localize : lc}}</span>\r\n <span *th=\"'7'\">{{'Avg. Time' | localize : lc}}</span>\r\n <span *th=\"'8'\">{{'Specific Time' | localize : lc}}</span>\r\n <span *th=\"'9'\">{{'Percentage' | localize : lc}}</span>\r\n <span *th=\"'10'\">{{'Calls for Period' | localize : lc}}</span>\r\n <span *th=\"'11'\">{{'Time for Period' | localize : lc}}</span>\r\n <span *th=\"'12'\">{{'Peak Time for Period' | localize : lc}}</span>\r\n <span *th=\"'13'\">{{'Min. Time for Period' | localize : lc}}</span>\r\n <span *th=\"'14'\">{{'Avg. Time for Period' | localize : lc}}</span>\r\n <span *th=\"'15'\">{{'Specific Time for Period' | localize : lc}}</span>\r\n <span *th=\"'16'\">{{'Percentage for Period' | localize : lc}}</span>\r\n\r\n <span *td=\"'1'; let item\">{{item.id}}</span>\r\n <span *td=\"'2'; let item\" title=\"{{item.description}}\">{{item.description.length <= 50 ? item.description : item.description.substr(0,50) + \"[...]\" }}</span>\r\n <span *td=\"'3'; let item\">{{item.calls}}</span>\r\n <span *td=\"'4'; let item\">{{item.time}}</span>\r\n <span *td=\"'5'; let item\">{{item.peaktime}}</span>\r\n <span *td=\"'6'; let item\">{{item.mintime}}</span>\r\n <span *td=\"'7'; let item\">{{item.avgtime}}</span>\r\n <span *td=\"'8'; let item\">{{item.timewithoutchildren}}</span>\r\n <span *td=\"'9'; let item\">{{item.percentage}}</span>\r\n <span *td=\"'10' let item\">{{item.snapdeltacalls}}</span>\r\n <span *td=\"'11' let item\">{{item.snapdeltatime}}</span>\r\n <span *td=\"'12' let item\">{{item.snappeaktime}}</span>\r\n <span *td=\"'13' let item\">{{item.snapmintime}}</span>\r\n <span *td=\"'14' let item\">{{item.snapavgtime}}</span>\r\n <span *td=\"'15' let item\">{{item.snaptimewithoutchildren}}</span>\r\n <span *td=\"'16' let item\">{{item.snappercentage}}</span>\r\n </es-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { AppSearch } from \"@esfaenza/es-table\";\r\nimport { TopActivity } from \"./TopActivity\";\r\n\r\nexport class TopActivitiesDataView extends AppSearch<TopActivity>{\r\n constructor() { super(); }\r\n\r\n filterfrom: string;\r\n filterto: string;\r\n}","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\nimport { ADM_LOCALE } from \"../../tokens\";\r\n\r\n@Injectable()\r\nexport class AdmTopActivitieLoc extends LocalizationService {\r\n constructor(@Inject(ADM_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n super.set(\"en->it\", \"Active Sessions\", [\"Sessioni Attive\"]);\r\n super.set(\"en->it\", \"Top Nodes\", [\"Prime Istruzioni\"]);\r\n super.set(\"en->it\", \"Top Sessions\", [\"Prime Sessioni\"]);\r\n super.set(\"en->it\", \"Loading Data\", [\"Carico i Dati\"]);\r\n super.set(\"en->it\", \"Top Activities\", [\"Attivita' Principali\"]);\r\n \r\n super.set(\"en->it\", \"Node Description\", [\"Descrizione Nodo\"]);\r\n super.set(\"en->it\", \"Node\", [\"Nodo\"]);\r\n super.set(\"en->it\", \"Activity\", [\"Attivita'\"]);\r\n super.set(\"en->it\", \"Limit\", [\"Limite\"]);\r\n super.set(\"en->it\", \"Node Type\", [\"Tipo Nodo\"]);\r\n\r\n super.set(\"en->it\", \"User\", [\"Utente\"]);\r\n super.set(\"en->it\", \"Tenant\", [\"Tenant\"]);\r\n super.set(\"en->it\", \"Process\", [\"Processo\"]);\r\n\r\n super.set(\"en->it\", \"Update every\", [\"Aggiorna ogni\"]);\r\n super.set(\"en->it\", \"second/s\", [\"secondo/i\"]);\r\n super.set(\"en->it\", \"Maximum Threads\", [\"Thread Massimi\"]);\r\n super.set(\"en->it\", \"CPUs\", [\"CPU\"]);\r\n \r\n }\r\n}","// Angular\r\nimport { Component, Inject } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { Location } from \"@angular/common\";\r\n\r\n// Configurazioni\r\nimport { BaseChartComponent, DateValue, Limit, LineChartData, LineSerie } from \"@esfaenza/es-charts\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PreferencesService } from \"@esfaenza/preferences\";\r\nimport { HTTPService } from \"@esfaenza/httpservice\";\r\nimport { DateService, InboundMessageTypes, InterComService } from \"@esfaenza/extensions\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\nimport { map } from \"rxjs/operators\";\r\n\r\n// Applicazione\r\nimport { DirectorInfos } from \"../../models/components/DirectorInfos\";\r\nimport { Repository } from \"../../models/externals/Repository\";\r\nimport { TopActivitiesDataView } from \"../../models/components/TopActivitiesDataView\";\r\nimport { TopNode } from \"../../models/components/TopNode\";\r\nimport { TopSession } from \"../../models/components/TopSession\";\r\nimport { ADM_BACKEND_URL, ADM_MODULE_PATH } from \"../../tokens\";\r\n\r\n// Localizzazione\r\nimport { AdmTopActivitieLoc } from \"./topact_search.component.loc\";\r\n\r\n@Component({\r\n selector: \"topact_search\",\r\n providers: [\r\n { provide: LocalizationService, useClass: AdmTopActivitieLoc }\r\n ],\r\n templateUrl: \"./topact_search.component.html\"\r\n})\r\nexport class AdmTopActivitiesComponent {\r\n public searchView: TopActivitiesDataView = new TopActivitiesDataView();\r\n public storageSub: any;\r\n private LastDataPoint: any;\r\n\r\n public autoUpdate: boolean = false;\r\n public seconds: string = \"5\";\r\n\r\n private ChartInstance: BaseChartComponent;\r\n\r\n constructor(\r\n public dateExts: DateService,\r\n public lc: LocalizationService,\r\n private localStorage: PreferencesService,\r\n private location: Location,\r\n private intercom: InterComService,\r\n private http: HTTPService,\r\n private route: ActivatedRoute,\r\n @Inject(ADM_BACKEND_URL) private backend: string,\r\n @Inject(ADM_MODULE_PATH) private mod: string) {\r\n\r\n this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data[\"title\"]) });\r\n }\r\n\r\n ngOnInit() {\r\n this.storageSub = this.route.queryParams.subscribe(params => {\r\n this.Init(params[\"ignoreStorage\"]);\r\n });\r\n }\r\n\r\n Init(ignoreStore) {\r\n this.doInit(ignoreStore);\r\n }\r\n\r\n async doInit(ignoreStorage) {\r\n let item = await this.localStorage.getItem<TopActivitiesDataView>(\"HotSearchTopAct\").toPromise();\r\n if (!ignoreStorage && item) {\r\n this.init(item);\r\n } else {\r\n this.init(null);\r\n this.location.replaceState(`/pages/${this.mod}/topact`);\r\n this.route.snapshot.queryParams = [];\r\n await this.localStorage.removeItem(\"HotSearchTopAct\").toPromise();\r\n }\r\n }\r\n\r\n init(HotPotato: TopActivitiesDataView) {\r\n if (HotPotato) {\r\n this.searchView = HotPotato;\r\n this.POSTGetItems(this.backend + Repository[\"POST_Adm_GetTopActivities\"], this.searchView, false);\r\n }\r\n else {\r\n this.searchView = new TopActivitiesDataView();\r\n this.sendSearch();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.storageSub)\r\n this.storageSub.unsubscribe();\r\n }\r\n\r\n sendSearch(resetPage: boolean = true, update: boolean = false, searchViewOverride: TopActivitiesDataView = null) {\r\n this.searchView.searchinprogress = true;\r\n if (resetPage)\r\n this.searchView.page = 1;\r\n\r\n this.POSTGetItems(this.backend + Repository[\"POST_Adm_GetTopActivities\"], searchViewOverride ?? this.searchView, update);\r\n }\r\n\r\n POSTGetItems(url: string, data: TopActivitiesDataView, update: boolean) {\r\n\r\n this.http.post<TopActivitiesDataView>(url, data).subscribe(async (t) => {\r\n //Se sono in modalità di update non devo toccare la searchView attuale se non per il searchinprogress che viene messo dall'es table\r\n if (!update) {\r\n this.searchView = t;\r\n this.localStorage.setItem(\"HotSearchTopAct\", this.searchView).subscribe();\r\n }\r\n var dirinfos = await this.getDirectorInfos();\r\n this.searchView.searchinprogress = false;\r\n this.reviewBindings(update, t, dirinfos);\r\n });\r\n }\r\n\r\n getDirectorInfos(): Promise<DirectorInfos> {\r\n return this.http.get<DirectorInfos>(this.backend + Repository[\"GET_Adm_GetInfos\"]).pipe(map(res => { return res; })).toPromise();\r\n }\r\n\r\n // **************************************************** Trasformazione da searchview con unico elemento con tutto ai 3 elementi:\r\n // **************************************************** Grafico, TopNodes e TopSessions\r\n TopActiveSessions: LineChartData;\r\n TopNodes: TopNode[];\r\n TopSessions: TopSession[];\r\n DirInfos: DirectorInfos;\r\n seriesPropertiesMapping: { [index: string]: LineSerie } = {};\r\n propertiesSeriesMapping: { [index: string]: string } = {\r\n [\"cputime\"]: \"CPU\",\r\n [\"waittime\"]: \"Wait\",\r\n [\"scripttime\"]: \"Scripting\",\r\n [\"dbtime\"]: \"DB\",\r\n [\"nettime\"]: \"Network\",\r\n [\"throttletime\"]: \"Throttling\",\r\n [\"sleeptime\"]: \"Sleep\",\r\n [\"iotime\"]: \"IO\"\r\n };\r\n\r\n reviewBindings(update: boolean, searchViewOverride?, dirInfos?: DirectorInfos) {\r\n let reference = (searchViewOverride ?? this.searchView).items[0];\r\n this.TopNodes = reference.topnodes;\r\n this.TopSessions = reference.topsessions;\r\n this.DirInfos = dirInfos;\r\n\r\n if (!reference.actsessions || reference.actsessions.length == 0) {\r\n this.TopActiveSessions = null;\r\n return;\r\n }\r\n\r\n let series: LineSerie[] = []; \r\n let props = Object.keys(reference.actsessions[0]);\r\n for (let i = 0; i < props.length; i++) {\r\n if (props[i] != 'sampletime') {\r\n let s = new LineSerie(this.propertiesSeriesMapping[props[i]], [], null, null, \"sessions\");\r\n series.push(s);\r\n this.seriesPropertiesMapping[props[i]] = s;\r\n }\r\n }\r\n\r\n for (let i = 0; i < reference.actsessions.length; i++) {\r\n let itemref = reference.actsessions[i];\r\n let theD = new Date(itemref.sampletime);\r\n\r\n for (let i = 0; i < props.length; i++)\r\n if (props[i] != 'sampletime' && (!update || this.dateExts.getDateConvertion(theD).isAfter(this.LastDataPoint)))\r\n this.seriesPropertiesMapping[props[i]].values.push(new DateValue(theD, itemref[props[i]]));\r\n }\r\n\r\n if (update && this.ChartInstance) {\r\n let data = new LineChartData(series, new Limit(dirInfos?.threads, this.lc.loc(\"Maximum Threads\")));\r\n if (series.some(t => t.values.length > 0)) {\r\n this.ChartInstance.addData(data);\r\n this.LastDataPoint = series.map(t => dayjs.max(t.values.map(v => this.dateExts.getDateConvertion(v.d))))[0];\r\n }\r\n }\r\n else {\r\n this.TopActiveSessions = new LineChartData(series, new Limit(dirInfos?.threads, this.lc.loc(\"Maximum Threads\")));\r\n this.LastDataPoint = series.map(t => dayjs.max(t.values.map(v => this.dateExts.getDateConvertion(v.d))))[0];\r\n }\r\n }\r\n\r\n // #region Gestione update automatico\r\n updateTimer: any;\r\n autoUpdateChanged() {\r\n if (!/^[1-9]\\d*$/.test(this.seconds))\r\n this.seconds = '10';\r\n const secondsInMs = parseInt(this.seconds, null) * 1000;\r\n if (this.autoUpdate) {\r\n this.sendSearch(false, true);\r\n this.updateTimer = setInterval(() => { this.sendSearch(false, true); }, secondsInMs);\r\n }\r\n else\r\n clearInterval(this.updateTimer);\r\n }\r\n // #endregion\r\n\r\n private from: Date;\r\n private to: Date;\r\n\r\n dataSelectionChanged(event: { from: Date, to: Date, initial: boolean }) {\r\n this.from = event.initial ? (this.searchView.filterfrom ? this.dateExts.getDateConvertion(this.searchView.filterfrom).toDate() : \"\") : event.from;\r\n this.to = event.initial ? (this.searchView.filterto ? this.dateExts.getDateConvertion(this.searchView.filterto).toDate() : \"\") : event.to;\r\n\r\n var pseudoSearchView: TopActivitiesDataView = JSON.parse(JSON.stringify(this.searchView));\r\n pseudoSearchView.filterfrom = this.from ? dayjs(this.from).format(this.lc.token(\"getFullDateDisplayFormat\")) : \"\";\r\n pseudoSearchView.filterto = this.to ? dayjs(this.to).format(this.lc.token(\"getFullDateDisplayFormat\")) : \"\";\r\n this.sendSearch(true, true, pseudoSearchView);\r\n }\r\n\r\n onChartLoaded(chart: BaseChartComponent) {\r\n this.ChartInstance = chart;\r\n chart.Chart.events.on(\"ready\", () => {\r\n (<am4charts.XYChart>chart.Chart).xAxes.each(x => x.zoom({ start: 0, end: 1 }, true, true));\r\n (<am4charts.XYChart>chart.Chart).yAxes.each(y => y.zoom({ start: 0, end: 1 }, true, true));\r\n setTimeout(() => {\r\n (<am4charts.XYChart>chart.Chart).xAxes.each(x => x.zoom({ start: 0, end: 1 }, true, true));\r\n (<am4charts.XYChart>chart.Chart).yAxes.each(y => y.zoom({ start: 0, end: 1 }, true, true));\r\n\r\n // 500 millisecondi è più o meno il tempo di prima animazione del grafico. Finito questo si resetta lo zoom\r\n }, 500);\r\n });\r\n }\r\n}","<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 {{'Top Activities' | localize : lc}}\r\n <span *ngIf=\"DirInfos\">&nbsp;-&nbsp;{{'' + DirInfos.cpus + ' ' + ('CPUs' | localize : lc) + (DirInfos.rssplan ? ' - ' + DirInfos.rssplan : '')}}</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]=\"'From' | 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]=\"'To' | 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 {{'Update every' | localize : lc}}&nbsp;<input [readonly]=\"autoUpdate\" maxlength=\"3\" class=\"form-control app-updevery-input\" type=\"text\" [(ngModel)]=\"seconds\" name=\"secs\" />&nbsp;{{'second/s' | localize : lc}}\r\n </div>\r\n <div class=\"pull-right m-t-2 app-margin-right-5\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" [(ngModel)]=\"autoUpdate\" (ngModelChange)=\"autoUpdateChanged();\" />\r\n <div class=\"slider round\"></div>\r\n </label>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </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>{{'Loading Data' | localize : lc}}</em></p>\r\n <div *ngIf=\"searchView\" class=\"row\">\r\n <div class=\"col-md-12 app-no-padding\">\r\n <!--<h5 class=\"app-margin-top-5\">{{'Active Sessions' | localize : lc}}</h5>-->\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 [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>{{'Top Nodes' | localize : lc}}</h5>\r\n <es-table [(ngModel)]=\"TopNodes\" [HidePaging]=\"true\">\r\n <ng-template #header>\r\n <th class=\"app-col-min\">{{'Node' | localize : lc}}</th>\r\n <th>{{'Node Description' | localize : lc}}</th>\r\n <th class=\"app-col-min\">{{'Activity' | localize : lc}}</th>\r\n <th class=\"app-col-min app-nowrap\">{{'Node Type' | localize : lc}}</th>\r\n </ng-template>\r\n <ng-template #body let-node>\r\n <td class=\"app-col-min\"><strong>{{node.profnodeid}}</strong></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 </ng-template>\r\n </es-table>\r\n </div>\r\n <div class=\"col-md-7\">\r\n <h5>{{'Top Sessions' | 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>{{'User' | localize : lc}}</th>\r\n <th>{{'Tenant' | localize : lc}}</th>\r\n <th>{{'Process' | localize : lc}}</th>\r\n <th>{{'Activity' | 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><strong>{{session.sid}}</strong></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>","import { AppSearch, GenericItem } from \"@esfaenza/es-table\";\r\n\r\nexport class LocksView extends AppSearch<GenericItem>{\r\n constructor() { super(); }\r\n\r\n filtersid: string;\r\n filterlock: string;\r\n filterglobal: boolean;\r\n}","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\nimport { ADM_LOCALE } from \"../../tokens\";\r\n\r\n@Injectable()\r\nexport class AdmEnqLoc extends LocalizationService {\r\n constructor(@Inject(ADM_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n super.set(\"en->it\", \"Search Application Locks\", [\"Ricerca Lock Applicativi\"]);\r\n super.set(\"en->it\", \"Name\", [\"Nome\"]);\r\n super.set(\"en->it\", \"Loading Application Locks\", [\"Carico i Lock Applicativi\"]);\r\n super.set(\"en->it\", \"Global\", [\"Globale\"]);\r\n }\r\n}","// Angular\r\nimport { Component, Inject } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { Location } from \"@angular/common\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PreferencesService } from \"@esfaenza/preferences\";\r\nimport { ExportService, InboundMessageTypes, InterComService } from \"@esfaenza/extensions\";\r\nimport { HTTPService } from \"@esfaenza/httpservice\";\r\n\r\n// Applicazione\r\nimport { LocksView } from \"../../models/components/LocksView\";\r\nimport { Repository } from \"../../models/externals/Repository\";\r\nimport { ADM_BACKEND_URL, ADM_MODULE_PATH } from \"../../tokens\";\r\n\r\n// Localizzazione\r\nimport { AdmEnqLoc } from \"./adm_enq.component.loc\";\r\n\r\n@Component({\r\n selector: \"adm_enq\",\r\n viewProviders: [{ provide: LocalizationService, useClass: AdmEnqLoc }],\r\n templateUrl: \"./adm_enq.component.html\"\r\n})\r\nexport class AdmEnqComponent {\r\n public locksView: LocksView = new LocksView();\r\n public storageSub: any;\r\n\r\n constructor(\r\n public lc: LocalizationService,\r\n private localStorage: PreferencesService,\r\n public expExts: ExportService,\r\n private intercom: InterComService,\r\n private http: HTTPService,\r\n private route: ActivatedRoute,\r\n private location: Location,\r\n @Inject(ADM_BACKEND_URL) private backend: string,\r\n @Inject(ADM_MODULE_PATH) private mod: string) {\r\n\r\n this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data[\"title\"]) });\r\n }\r\n\r\n ngOnInit() {\r\n this.storageSub = this.route.queryParams.subscribe(params => { this.Init(params[\"ignoreStorage\"]); });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.storageSub)\r\n this.storageSub.unsubscribe();\r\n }\r\n\r\n async Init(ignoreStorage) {\r\n let item = await this.localStorage.getItem<LocksView>(\"HotEnqueue\").toPromise();\r\n if (!ignoreStorage && item) {\r\n this.init(item);\r\n } else {\r\n this.init(null);\r\n this.location.replaceState(`/pages/${this.mod}/serverenqueues`);\r\n this.route.snapshot.queryParams = [];\r\n await this.localStorage.removeItem(\"HotEnqueue\").toPromise();\r\n }\r\n }\r\n\r\n init(HotPotato: LocksView) {\r\n if (HotPotato) {\r\n this.locksView = HotPotato;\r\n this.POSTGetProcesses(this.backend + Repository[\"POST_Adm_GetServerLocks\"], this.locksView);\r\n }\r\n else {\r\n this.locksView = new LocksView();\r\n this.sendSearch();\r\n }\r\n }\r\n\r\n sendSearch(resetPage: boolean = true) {\r\n if (resetPage)\r\n this.locksView.page = 1;\r\n\r\n this.POSTGetProcesses(this.backend + Repository[\"POST_Adm_GetServerLocks\"], this.locksView);\r\n }\r\n\r\n POSTGetProcesses(url: string, data: LocksView) {\r\n this.http.post<LocksView>(url, data).subscribe(t => {\r\n this.locksView = t;\r\n this.localStorage.setItem(\"HotEnqueue\", this.locksView).subscribe();\r\n });\r\n }\r\n}","<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\">{{'Search Application Locks' | 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]=\"'Name' | localize : lc\"></form-input>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper app-padding-top-10\">\r\n <form-checkbox [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"locksView.filterglobal\" name=\"filterglobal\"></form-checkbox>&nbsp;\r\n <span class=\"app-pointer\" (click)=\"locksView.filterglobal = !locksView.filterglobal\">{{'Global' | 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>{{'Loading Application Locks' | localize : lc}}...</em></p>\r\n <div *ngIf=\"locksView\">\r\n <es-table [(ngModel)]=\"locksView\" [AutoUpdate]=\"true\" [OrderByColumn]=\"true\" (onSearchRequest)=\"sendSearch($event);\"></es-table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","export class KeyValue {\r\n constructor(public id: string, public description: string) { }\r\n}","import { AppSearch } from \"@esfaenza/es-table\";\r\nimport { Metric } from \"./Metric\";\r\n\r\nexport class MetricsView extends AppSearch<Metric> {\r\n constructor() { super(); }\r\n\r\n filterfrom: string;\r\n filterto: string;\r\n filtersid: string;\r\n filterserial: string;\r\n filtermetrics: string[];\r\n filterrealtime: boolean;\r\n fitlerinstance: string;\r\n}","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\nimport { ADM_LOCALE } from \"../../tokens\";\r\n\r\n@Injectable()\r\nexport class AdmMetricsLoc extends LocalizationService {\r\n constructor(@Inject(ADM_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n super.set(\"en->it\", \"System Metrics\", [\"Metriche di Sistema\"]);\r\n super.set(\"en->it\", \"Session ID\", [\"Cod. Sessione\"]);\r\n super.set(\"en->it\", \"Session Serial\", [\"Seriale Sessione\"]);\r\n super.set(\"en->it\", \"Filter Metrics...\", [\"Filtra Metriche...\"]);\r\n super.set(\"en->it\", \"Loading Data\", [\"Carico i Dati\"]);\r\n super.set(\"en->it\", \"Update every\", [\"Aggiorna ogni\"]);\r\n super.set(\"en->it\", \"second/s\", [\"secondo/i\"]);\r\n super.set(\"en->it\", \"Metrics Instance\", [\"Istanza Metriche\"]);\r\n }\r\n}","// Angular\r\nimport { HttpParams } from \"@angular/common/http\";\r\nimport { Component, Inject } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { Location } from \"@angular/common\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { PreferencesService } from \"@esfaenza/preferences\";\r\nimport { BaseChartComponent } from \"@esfaenza/es-charts\";\r\nimport { HTTPService } from \"@esfaenza/httpservice\";\r\nimport { DateService, InboundMessageTypes, InterComService } from \"@esfaenza/extensions\";\r\n\r\n// Applicazione\r\nimport { KeyValue } from \"../../models/shared/KeyValue\";\r\nimport { Metric } from \"../../models/components/Metric\";\r\nimport { MetricChart } from \"../../models/components/MetricChart\";\r\nimport { MetricsView } from \"../../models/components/MetricsView\";\r\nimport { Repository } from \"../../models/externals/Repository\";\r\nimport { ADM_BACKEND_URL, ADM_MODULE_PATH } from \"../../tokens\";\r\n\r\n// Localizzazione\r\nimport { AdmMetricsLoc } from \"./metrics_search.component.loc\";\r\n\r\n@Component({\r\n selector: \"metrics_search\",\r\n providers: [\r\n { provide: LocalizationService, useClass: AdmMetricsLoc }\r\n ],\r\n templateUrl: \"./metrics_search.component.html\"\r\n})\r\nexport class AdmMetricsComponent {\r\n\r\n public Metrics: Metric[];\r\n private MetricsChartCache: { [name: string]: { chart: BaseChartComponent, lastTs: Date } } = {};\r\n\r\n public searchView: MetricsView = new MetricsView();\r\n public storageSub: any;\r\n\r\n public autoUpdate: boolean = false;\r\n public seconds: string = \"5\";\r\n\r\n constructor(\r\n public dateExts: DateService,\r\n public lc: LocalizationService,\r\n private localStorage: PreferencesService,\r\n private location: Location,\r\n private intercom: InterComService,\r\n private http: HTTPService,\r\n private route: ActivatedRoute,\r\n @Inject(ADM_BACKEND_URL) private backend: string,\r\n @Inject(ADM_MODULE_PATH) private mod: string) {\r\n\r\n this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data[\"title\"]) });\r\n }\r\n\r\n ngOnInit() {\r\n this.storageSub = this.route.queryParams.subscribe(params => {\r\n this.Init(params[\"ignoreStorage\"]);\r\n });\r\n }\r\n\r\n Init(ignoreStore) {\r\n this.doInit(ignoreStore);\r\n }\r\n\r\n dateChanged() {\r\n // Pulizia di tutti i parametri di ricerca dipendenti dalle date\r\n this.metricsToShow = [];\r\n this.Metrics = [];\r\n this.instanceRequired = false;\r\n this.Instances = [];\r\n this.selectedInstance = \"\";\r\n this.searchView.filtermetrics = [];\r\n\r\n var pars = new HttpParams().set(\"from\", this.searchView.filterfrom || \"\").set(\"to\", this.searchView.filterto || \"\")\r\n this.http.get<Metric[]>(this.backend + Repository[\"GET_Adm_GetMetrics\"], pars).subscribe(t => this.Metrics = t);\r\n }\r\n\r\n async doInit(ignoreStorage) {\r\n let item = await this.localStorage.getItem<MetricsView>(\"HotSearchMetrics\").toPromise();\r\n if (!ignoreStorage && item) {\r\n this.init(item);\r\n } else {\r\n this.init(null);\r\n this.location.replaceState(`/pages/${this.mod}/metrics`);\r\n this.route.snapshot.queryParams = [];\r\n await this.localStorage.removeItem(\"HotSearchMetrics\").toPromise();\r\n }\r\n }\r\n\r\n init(HotPotato: MetricsView) {\r\n if (HotPotato) {\r\n this.searchView = HotPotato;\r\n this.POSTGetItems(this.backend + Repository[\"POST_Adm_GetMetrics\"], this.searchView, false);\r\n }\r\n else {\r\n this.searchView = new MetricsView();\r\n this.sendSearch();\r\n }\r\n this.dateChanged();\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.storageSub)\r\n this.storageSub.unsubscribe();\r\n }\r\n\r\n sendSearch(resetPage: boolean = true, update: boolean = false, searchViewOverride: MetricsView = null) {\r\n if (!update)\r\n this.MetricsChartCache = {};\r\n\r\n this.searchView.searchinprogress = true;\r\n // Questa ricerca prende i nomi distinct delle metriche quindi devo prendere tutto per forza\r\n this.searchView.itemsperpageoverride = 999999;\r\n if (resetPage)\r\n this.searchView.page = 1;\r\n\r\n this.POSTGetItems(this.backend + Repository[\"POST_Adm_GetMetrics\"], searchViewOverride ?? this.searchView, update);\r\n }\r\n\r\n public Instances: KeyValue[] = []\r\n public selectedInstance = \"\";\r\n public instanceRequired: boolean = false;\r\n public metricsToShow: Metric[] = [];\r\n\r\n POSTGetItems(url: string, data: MetricsView, update: boolean) {\r\n data.filterrealtime = update ? data.filterrealtime : !(!!data.filterfrom || !!data.filterto);\r\n\r\n this.http.post<MetricsView>(url, data).subscribe(async (t) => {\r\n //Se sono in modalità di update non devo toccare la searchView attuale se non per il searchinprogress che viene messo dall'es table\r\n if (!update) {\r\n this.selectedInstance = \"\";\r\n this.metricsToShow = [];\r\n this.searchView = t;\r\n this.searchView.items.forEach(m => {\r\n if (!this.Instances.find(t => t.id == m.instance))\r\n this.Instances.push(new KeyValue(m.instance, m.instance));\r\n });\r\n this.instanceRequired = this.Instances.length > 1;\r\n if (this.Instances.length == 1) {\r\n this.selectedInstance = this.Instances[0].id;\r\n this.instanceSelected();\r\n }\r\n this.localStorage.setItem(\"HotSearchMetrics\", this.searchView).subscribe();\r\n }\r\n else {\r\n // Per ogni grafico di ogni metrica aggiungo tutti i valori che sono DOPO all'ultimo ts registrato per quel grafico\r\n t.items.forEach(m => {\r\n m.values.forEach(c => {\r\n let refm = this.MetricsChartCache[this.metricKey(m, c)];\r\n if (refm) {\r\n c.series.forEach(s => { s.values = s.values.filter(v => this.dateExts.getDateConvertion(v.d).isAfter(refm.lastTs)); });\r\n if (c.series.some(t => t.values.length > 0)) {\r\n refm.lastTs = c.series.map(t => dayjs.max(t.values.map(v => this.dateExts.getDateConvertion(v.d))))[0];\r\n refm.chart.addData(c);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n this.searchView.searchinprogress = false;\r\n });\r\n }\r\n\r\n instanceSelected() {\r\n if (!this.selectedInstance)\r\n return;\r\n\r\n this.metricsToShow = this.searchView.items.filter(t => t.instance == this.selectedInstance);\r\n }\r\n\r\n linkChartToMetric(metric: Metric, metricChart: MetricChart, chartComp: BaseChartComponent) {\r\n 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] };\r\n }\r\n\r\n private metricKey(metric: Metric, value: MetricChart): string {\r\n return metric.name + \" - \" + value.xtitle + \" - \" + metric.instance;\r\n }\r\n\r\n // #region Gestione update automatico\r\n updateTimer: any;\r\n autoUpdateChanged() {\r\n if (!/^[1-9]\\d*$/.test(this.seconds))\r\n this.seconds = '10';\r\n const secondsInMs = parseInt(this.seconds, null) * 1000;\r\n if (this.autoUpdate) {\r\n this.sendSearch(false, true);\r\n this.updateTimer = setInterval(() => { this.sendSearch(false, true); }, secondsInMs);\r\n }\r\n else\r\n clearInterval(this.updateTimer);\r\n }\r\n // #endregion\r\n}","<div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card app-overflow-visible\" widget>\r\n <div class=\"card-header\">\r\n <span class=\"text-uppercase\">\r\n {{'System Metrics' | localize : lc}}\r\n </span>\r\n </div>\r\n <div class=\"card-body widget-body\">\r\n <div class=\"col-md-12\">\r\n <form role=\"form\">\r\n <div class=\"row\">\r\n <div class=\"col-md-11\">\r\n <div class=\"col-md-12 row app-no-padding app-first-filter-line\">\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-datetime [Readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterfrom\" name=\"filterfrom\" [Placeholder]=\"'From' | localize : lc\" (inputChange)=\"dateChanged();\"></form-datetime>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-datetime [Readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterto\" name=\"filterto\" [Placeholder]=\"'To' | localize : lc\" (inputChange)=\"dateChanged();\"></form-datetime>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-input [Readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtersid\" name=\"filtersid\" [Placeholder]=\"'Session ID' | localize : lc\"></form-input>\r\n </div>\r\n <div class=\"col-xl-2 col-lg-2 col-md-12 app-filter-wrapper\">\r\n <form-input [Readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filterserial\" name=\"filterserial\" [Placeholder]=\"'Session Serial' | localize : lc\"></form-input>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 row app-no-padding\">\r\n <div class=\"col-12 app-filter-wrapper\">\r\n <form-multiselect [Readonly]=\"autoUpdate\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"searchView.filtermetrics\" [IdField]=\"'name'\" [Display]=\"'{name}'\" name=\"filtermetrics\" [SelectLabel]=\"'Filter Metrics...' | localize : lc\" [Source]=\"Metrics\"></form-multiselect>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n <div class=\"col-md-1 app-no-padding\">\r\n <button [disabled]=\"searchView.searchinprogress || autoUpdate\" class=\"input-group-addon btn app-btn-search\" (click)=\"sendSearch()\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </form>\r\n <div class=\"app-col-12 app-margin-top-15\">\r\n <div class=\"pull-right\">\r\n {{'Update every' | localize : lc}}&nbsp;<input [readonly]=\"autoUpdate\" maxlength=\"3\" class=\"form-control app-updevery-input\" type=\"text\" [(ngModel)]=\"seconds\" />&nbsp;{{'second/s' | localize : lc}}\r\n </div>\r\n <div class=\"pull-right m-t-2 app-margin-right-5\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" [(ngModel)]=\"autoUpdate\" (ngModelChange)=\"autoUpdateChanged();\" />\r\n <div class=\"slider round\"></div>\r\n </label>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <p *ngIf=\"!searchView\"><em>{{'Loading Data' | localize : lc}}</em></p>\r\n <div *ngIf=\"searchView && instanceRequired\">\r\n <form-select [Validation]=\"false\" [Label]=\"'Metrics Instance' | localize : lc\" [(ngModel)]=\"selectedInstance\" name=\"instance\" [Source]=\"Instances\" (inputChange)=\"instanceSelected()\" required></form-select>\r\n </div>\r\n <div *ngIf=\"searchView && metricsToShow && metricsToShow.length > 0\">\r\n <div class=\"col-md-12 app-padding-right-0 row app-margin-top-15\">\r\n <ng-container *ngFor=\"let metric of metricsToShow; let i = index\">\r\n <div class=\"col-md-4 app-no-padding app-simple-border\" *ngFor=\"let chart of metric.values; let z = index\">\r\n <div style=\"width: 100%; height: 260px\">\r\n <es-line-chart [XTitle]=\"chart.xtitle\"\r\n [YTitle]=\"chart.ytitle\"\r\n [MinGridDistance]=\"65\"\r\n [Timeline]=\"false\"\r\n [LegendPadding]=\"{top: 0, bottom: 7, right: 0, left: 10}\"\r\n [MergeDatasets]=\"true\"\r\n [Data]=\"chart\"\r\n [Animations]=\"true\"\r\n [Legend]=\"chart.legend\"\r\n name=\"metric_{{i}}_chart_{{z}}\"\r\n (chartLoaded)=\"linkChartToMetric(metric, chart, $event);\"\r\n [DataGroupingThreshold]=\"99999999\">\r\n </es-line-chart>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Injectable, Inject } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\nimport { ADM_LOCALE } from \"../../tokens\";\r\n\r\n@Injectable()\r\nexport class AdmLogsLoc extends LocalizationService {\r\n constructor(@Inject(ADM_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE);\r\n super.set(\"en->it\", \"Server Logs\", [\"Log del Server\"]);\r\n }\r\n}","// Angular\r\nimport { Component, Inject } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { HTTPService } from \"@esfaenza/httpservice\";\r\nimport { InboundMessageTypes, InterComService } from \"@esfaenza/extensions\";\r\n\r\n// Applicazione\r\nimport { ADM_BACKEND_URL } from \"../../tokens\";\r\nimport { Repository } from \"../../models/externals/Repository\";\r\n\r\n// Localizzazione\r\nimport { AdmLogsLoc } from \"./adm_logs.component.loc\";\r\n\r\n@Component({\r\n selector: \"adm_logs\",\r\n viewProviders: [{ provide: LocalizationService, useClass: AdmLogsLoc }],\r\n templateUrl: \"./adm_logs.component.html\"\r\n})\r\nexport class AdmLogsComponent {\r\n public Log: string;\r\n\r\n constructor(\r\n private intercom: InterComService,\r\n private http: HTTPService,\r\n private lc: LocalizationService,\r\n private route: ActivatedRoute,\r\n @Inject(ADM_BACKEND_URL) private backend: string) {\r\n\r\n this.intercom.send(InboundMessageTypes.Navigation, { sub: false, routeTitle: this.lc.loc(this.route.snapshot.data[\"title\"]) });\r\n }\r\n\r\n ngOnInit() {\r\n this.http.get<string>(this.backend + Repository[\"GET_Adm_GetServerLogs\"]).subscribe(t => { this.Log = t; });\r\n }\r\n}","<div class=\"row\">\r\n <div class=\"col-12 bottom-15\">\r\n <p *ngIf=\"Log\" class=\"app-whitespace-prewrap\" [innerHTML]=\"Log\"></p>\r\n </div>\r\n</div>","/** Chiave di questo modulo, da utilizzare per i messaggi */\r\nexport const MK_ADM = \"EsAdminModule\";\r\n\r\n/** Messaggi gestiti da questo modulo */\r\nexport enum AdmMessageTypes{\r\n Message\r\n}","// Angular\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { InterComService, InterComMessage } from \"@esfaenza/extensions\";\r\n\r\n// Modelli\r\nimport { AdmMessageTypes, MK_ADM } from \"./admin-module-messages\";\r\n\r\n@Injectable()\r\nexport class AdminModuleCommService {\r\n\r\n constructor(private intercom: InterComService) { }\r\n\r\n public register() {\r\n this.intercom.register(MK_ADM);\r\n this.intercom.outbounds[MK_ADM].subscribe((t: InterComMessage) => { this.handleOutbound(t.type, t.message); });\r\n }\r\n\r\n private handleOutbound(type: AdmMessageTypes, message: any) {\r\n switch (type) {\r\n case AdmMessageTypes.Message:\r\n if (myconfig.DEBUG_MODE)\r\n console.log(\"@admin-module outbound message: \" + message);\r\n break;\r\n }\r\n }\r\n}","// Angular\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { RouterModule } from \"@angular/router\";\r\n\r\n// Material\r\nimport { MatIconModule } from '@angular/material/icon'\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDayjsDateModule } from \"@esfaenza/material-dayjs-adapter\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\n\r\n// Libs\r\nimport { NgxMatDatetimePickerModule } from '@angular-material-components/datetime-picker';\r\nimport { ModalModule } from \"ngx-bootstrap/modal\";\r\nimport { CsvModule } from \"@ctrl/ngx-csv\";\r\nimport { BsDropdownModule } from \"ngx-bootstrap/dropdown\";\r\nimport { TooltipModule } from \"ngx-bootstrap/tooltip\";\r\n\r\n// Esfaenza\r\nimport { EsTableModule } from \"@esfaenza/es-table\";\r\nimport { FormsAndValidationsModule } from \"@esfaenza/forms-and-validations\";\r\nimport { EsChartsModule } from \"@esfaenza/es-charts\";\r\nimport { EsGertrudeModule } from \"@esfaenza/gertrude\";\r\nimport { LocalizationModule } from \"@esfaenza/localizations\";\r\nimport { ContextMenuModule } from \"@esfaenza/ngx-contextmenu\";\r\n\r\n// Components\r\nimport { AdmAuditsComponent } from \"./components/audits/adm_audits.component\";\r\nimport { AdmWrkComponent } from \"./components/workers/adm_wrk.component\";\r\nimport { AdmProfilerComponent } from \"./components/profiler/adm_profiler.component\";\r\nimport { AdmTopActivitiesComponent } from \"./components/topact/topact_search.component\";\r\nimport { AdmEnqComponent } from \"./components/enqueues/adm_enq.component\";\r\nimport { AdmMetricsComponent } from \"./components/metrics/metrics_search.component\";\r\nimport { AdmLogsComponent } from \"./components/logs/adm_logs.component\";\r\n\r\n// Communication Service\r\nimport { AdminModuleCommService } from \"./admin-module.comms.service\";\r\n\r\n// Tokens\r\nimport { ADM_BACKEND_URL, ADM_CONVERSATIONS, ADM_LOCALE } from \"./tokens\";\r\n\r\nexport const routeConfig = [\r\n {\r\n path: \"\", children: [\r\n { path: \"serverworkers\", component: AdmWrkComponent, data: { title: \"Search Application Processes\", internalNavigation: false } },\r\n { path: \"profiler\", component: AdmProfilerComponent, data: { title: \"Server Profiler\", internalNavigation: false } },\r\n { path: \"topact\", component: AdmTopActivitiesComponent, data: { title: \"Top Activities\", internalNavigation: false } },\r\n { path: \"metrics\", component: AdmMetricsComponent, data: { title: \"System Metrics\", internalNavigation: false } },\r\n { path: \"serverlogs\", component: AdmLogsComponent, data: { title: \"Server Logs\", internalNavigation: false } },\r\n { path: \"serveraudits\", component: AdmAuditsComponent, data: { title: \"Search Application Audits\", internalNavigation: false } },\r\n { path: \"serverenqueues\", component: AdmEnqComponent, data: { title: \"Search Application Locks\", internalNavigation: false } },\r\n ]\r\n }\r\n];\r\n\r\nconst MODULES = [\r\n // Base\r\n CommonModule,\r\n FormsModule,\r\n\r\n // Material\r\n MatDatepickerModule,\r\n MatDayjsDateModule,\r\n MatIconModule,\r\n MatInputModule,\r\n\r\n // Bootstrap\r\n ModalModule,\r\n TooltipModule,\r\n BsDropdownModule,\r\n CsvModule,\r\n\r\n // Esfaenza e componenti visuali\r\n ContextMenuModule,\r\n LocalizationModule,\r\n EsTableModule,\r\n FormsAndValidationsModule,\r\n EsGertrudeModule,\r\n EsChartsModule,\r\n NgxMatDatetimePickerModule,\r\n\r\n RouterModule.forChild(routeConfig),\r\n];\r\n\r\nconst COMPONENTS = [\r\n AdmWrkComponent,\r\n AdmProfilerComponent,\r\n AdmTopActivitiesComponent,\r\n AdmLogsComponent,\r\n AdmAuditsComponent,\r\n AdmEnqComponent,\r\n AdmMetricsComponent\r\n];\r\n\r\n@NgModule({\r\n imports: [...MODULES],\r\n declarations: [...COMPONENTS],\r\n providers: [\r\n AdminModuleCommService,\r\n { provide: ADM_LOCALE, useValue: myconfig.LOCALE },\r\n { provide: ADM_BACKEND_URL, useValue: myconfig.BACKEND_URL },\r\n { provide: ADM_CONVERSATIONS, useValue: !!myconfig.TRANSACTIONS_TIMEOUT_S }\r\n ]\r\n})\r\nexport class AdmModule {\r\n constructor(private commService: AdminModuleCommService) {\r\n console.log(\"@esfaenza/admin-module: BOOTSTRAP\");\r\n this.commService.register();\r\n }\r\n}","/*\r\n * Public API Surface of admin-module\r\n */\r\n\r\nexport * from './lib/admin-module.module';\r\nexport * from './lib/tokens';\r\nexport * from \"./lib/admin-module-messages\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}