@esfaenza/admin-module 15.2.26 → 15.2.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/admin-module.comms.service.mjs +4 -4
- package/esm2020/lib/admin-module.module.mjs +5 -5
- package/esm2020/lib/components/_shared/node_detail.component.loc.mjs +4 -4
- package/esm2020/lib/components/_shared/node_detail.component.mjs +4 -4
- package/esm2020/lib/components/audits/adm_audits.component.loc.mjs +4 -4
- package/esm2020/lib/components/audits/adm_audits.component.mjs +16 -19
- package/esm2020/lib/components/dynamic_views/adm_dynamic_views.component.loc.mjs +4 -4
- package/esm2020/lib/components/dynamic_views/adm_dynamic_views.component.mjs +18 -21
- package/esm2020/lib/components/enqueues/adm_enq.component.loc.mjs +4 -4
- package/esm2020/lib/components/enqueues/adm_enq.component.mjs +16 -18
- package/esm2020/lib/components/logs/adm_logs.component.loc.mjs +4 -4
- package/esm2020/lib/components/logs/adm_logs.component.mjs +12 -14
- package/esm2020/lib/components/metrics/metrics_search.component.loc.mjs +4 -4
- package/esm2020/lib/components/metrics/metrics_search.component.mjs +46 -50
- package/esm2020/lib/components/profiler/adm_profiler.component.loc.mjs +4 -4
- package/esm2020/lib/components/profiler/adm_profiler.component.mjs +24 -32
- package/esm2020/lib/components/topact/topact_search.component.loc.mjs +4 -4
- package/esm2020/lib/components/topact/topact_search.component.mjs +30 -35
- package/esm2020/lib/components/workers/adm_wrk.component.loc.mjs +4 -4
- package/esm2020/lib/components/workers/adm_wrk.component.mjs +29 -48
- package/esm2020/lib/models/components/ProfilerDataNode.loc.mjs +4 -4
- package/esm2020/lib/pipes/format_time.pipe.mjs +4 -4
- package/esm2020/lib/services/admin-module.base.service.mjs +131 -0
- package/fesm2015/esfaenza-admin-module.mjs +367 -241
- package/fesm2015/esfaenza-admin-module.mjs.map +1 -1
- package/fesm2020/esfaenza-admin-module.mjs +334 -268
- package/fesm2020/esfaenza-admin-module.mjs.map +1 -1
- package/lib/components/audits/adm_audits.component.d.ts +4 -4
- package/lib/components/dynamic_views/adm_dynamic_views.component.d.ts +5 -5
- package/lib/components/enqueues/adm_enq.component.d.ts +4 -4
- package/lib/components/logs/adm_logs.component.d.ts +4 -4
- package/lib/components/metrics/metrics_search.component.d.ts +5 -5
- package/lib/components/profiler/adm_profiler.component.d.ts +6 -7
- package/lib/components/topact/topact_search.component.d.ts +4 -4
- package/lib/components/workers/adm_wrk.component.d.ts +7 -5
- package/lib/services/admin-module.base.service.d.ts +41 -0
- package/package.json +5 -12
- package/esm2020/lib/models/externals/Repository.mjs +0 -25
- package/lib/models/externals/Repository.d.ts +0 -24
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// Angular
|
|
2
|
+
import { Injectable } from "@angular/core";
|
|
3
|
+
import { HttpParams } from "@angular/common/http";
|
|
4
|
+
// ES
|
|
5
|
+
import { MessageService } from "@esfaenza/extensions";
|
|
6
|
+
import { HTTPService } from "@esfaenza/httpservice";
|
|
7
|
+
import { firstValueFrom, catchError, of } from "rxjs";
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
// Chiamate ai Repository
|
|
10
|
+
const GET_Director_ChangeProcessConsumerGroup = "/api/Director/ChangeProcessConsumerGroup";
|
|
11
|
+
const GET_Director_ClearAllCaches = "/api/Director/ClearAllCaches";
|
|
12
|
+
const GET_Director_GetConsumerGroups = "/api/Director/GetConsumerGroups#cache";
|
|
13
|
+
const GET_Director_GetInfos = "/api/Director/GetInfos";
|
|
14
|
+
const GET_Director_GetMetrics = "/api/Director/GetMetrics";
|
|
15
|
+
const POST_Director_GetMetrics = "/api/Director/GetMetrics";
|
|
16
|
+
const POST_Director_GetProfilerDataNodes = "/api/Director/GetProfilerDataNodes";
|
|
17
|
+
const POST_Director_GetServerAudits = "/api/Director/GetServerAudits";
|
|
18
|
+
const POST_Director_GetDynamicViewData = "/api/Director/GetDynamicViewData";
|
|
19
|
+
const POST_Director_GetServerLocks = "/api/Director/GetServerLocks";
|
|
20
|
+
const GET_Director_GetServerLogs = "/api/Director/GetServerLogs";
|
|
21
|
+
const GET_Director_GetDynamicViews = "/api/Director/GetDynamicViews";
|
|
22
|
+
const POST_Director_GetServerWorkers = "/api/Director/GetServerWorkers";
|
|
23
|
+
const POST_Director_GetTopActivities = "/api/Director/GetTopActivities";
|
|
24
|
+
const GET_Director_GetWorkerStatus = "/api/Director/GetWorkerStatus";
|
|
25
|
+
const GET_Director_InvalidateServerSideCache = "/api/Director/InvalidateServerSideCache";
|
|
26
|
+
const GET_Director_KillProcess = "/api/Director/KillProcess";
|
|
27
|
+
const GET_Director_SetProcessTracing = "/api/Director/SetProcessTracing";
|
|
28
|
+
const GET_Director_StartWorker = "/api/Director/StartWorker";
|
|
29
|
+
const GET_Director_StopWorker = "/api/Director/StopWorker";
|
|
30
|
+
const GET_Director_GetNodeStats = "/api/Director/GetNodeStats";
|
|
31
|
+
const GET_Director_GetSessionStats = "/api/Director/GetSessionStats";
|
|
32
|
+
export class AdminModuleBaseService {
|
|
33
|
+
constructor(injector) {
|
|
34
|
+
this.injector = injector;
|
|
35
|
+
this.http = this.injector.get(HTTPService);
|
|
36
|
+
this.msgExts = this.injector.get(MessageService);
|
|
37
|
+
}
|
|
38
|
+
async getServerWorkers(sv) {
|
|
39
|
+
let ret = await firstValueFrom(this.http.post(POST_Director_GetServerWorkers, sv));
|
|
40
|
+
return ret;
|
|
41
|
+
}
|
|
42
|
+
async doSetProcessTracing(instanceid, sid, serial, enable) {
|
|
43
|
+
var pars = new HttpParams()
|
|
44
|
+
.set("instanceid", instanceid)
|
|
45
|
+
.set("sid", sid)
|
|
46
|
+
.set("serial", serial)
|
|
47
|
+
.set("enable", enable);
|
|
48
|
+
let ret = await firstValueFrom(this.http.get(GET_Director_SetProcessTracing, pars));
|
|
49
|
+
return ret;
|
|
50
|
+
}
|
|
51
|
+
async doKillProcess(instanceid, sid, serial) {
|
|
52
|
+
var pars = new HttpParams()
|
|
53
|
+
.set("instanceid", instanceid)
|
|
54
|
+
.set("sid", sid)
|
|
55
|
+
.set("serial", serial);
|
|
56
|
+
let ret = await firstValueFrom(this.http.get(GET_Director_KillProcess, pars));
|
|
57
|
+
return ret;
|
|
58
|
+
}
|
|
59
|
+
async doChangeProcessConsumerGroup(instanceid, sid, serial, consumerGroup) {
|
|
60
|
+
var pars = new HttpParams()
|
|
61
|
+
.set("instanceid", instanceid)
|
|
62
|
+
.set("sid", sid)
|
|
63
|
+
.set("serial", serial)
|
|
64
|
+
.set("consumer_group", consumerGroup);
|
|
65
|
+
let ret = await firstValueFrom(this.http.get(GET_Director_ChangeProcessConsumerGroup, pars));
|
|
66
|
+
return ret;
|
|
67
|
+
}
|
|
68
|
+
async getConsumerGroups() {
|
|
69
|
+
let ret = await firstValueFrom(this.http.get(GET_Director_GetConsumerGroups));
|
|
70
|
+
return ret;
|
|
71
|
+
}
|
|
72
|
+
async getServerLogs() {
|
|
73
|
+
let ret = await firstValueFrom(this.http.get(GET_Director_GetServerLogs));
|
|
74
|
+
return ret;
|
|
75
|
+
}
|
|
76
|
+
async getTopActivities(sv) {
|
|
77
|
+
let ret = await firstValueFrom(this.http.post(POST_Director_GetTopActivities, sv));
|
|
78
|
+
return ret;
|
|
79
|
+
}
|
|
80
|
+
async getInfos() {
|
|
81
|
+
let ret = await firstValueFrom(this.http.get(GET_Director_GetInfos, null, null, false).pipe(catchError(_ => of(null))));
|
|
82
|
+
return ret;
|
|
83
|
+
}
|
|
84
|
+
async getNodeStats(nodeId) {
|
|
85
|
+
let pars = new HttpParams().set("nodeId", nodeId);
|
|
86
|
+
let ret = await firstValueFrom(this.http.get(GET_Director_GetNodeStats, pars));
|
|
87
|
+
return ret;
|
|
88
|
+
}
|
|
89
|
+
async getSessionStats(sid, serial) {
|
|
90
|
+
let pars = new HttpParams().set('sid', sid).set('serial', serial);
|
|
91
|
+
let ret = await firstValueFrom(this.http.get(GET_Director_GetSessionStats, pars));
|
|
92
|
+
return ret;
|
|
93
|
+
}
|
|
94
|
+
async getProfilerDataNodes(sv) {
|
|
95
|
+
let ret = await firstValueFrom(this.http.post(POST_Director_GetProfilerDataNodes, sv));
|
|
96
|
+
return ret;
|
|
97
|
+
}
|
|
98
|
+
async getMetrics(sv) {
|
|
99
|
+
let ret = await firstValueFrom(this.http.post(POST_Director_GetMetrics, sv));
|
|
100
|
+
return ret;
|
|
101
|
+
}
|
|
102
|
+
async getMetricsList(from, to) {
|
|
103
|
+
let pars = new HttpParams()
|
|
104
|
+
.set("from", from || "")
|
|
105
|
+
.set("to", to || "");
|
|
106
|
+
let ret = await firstValueFrom(this.http.get(GET_Director_GetMetrics, pars));
|
|
107
|
+
return ret.sort((a, b) => a.name.localeCompare(b.name));
|
|
108
|
+
}
|
|
109
|
+
async getServerLocks(sv) {
|
|
110
|
+
let ret = await firstValueFrom(this.http.post(POST_Director_GetServerLocks, sv));
|
|
111
|
+
return ret;
|
|
112
|
+
}
|
|
113
|
+
async getDynamicViewData(sv) {
|
|
114
|
+
let ret = await firstValueFrom(this.http.post(POST_Director_GetDynamicViewData, sv));
|
|
115
|
+
return ret;
|
|
116
|
+
}
|
|
117
|
+
async getDynamicViews() {
|
|
118
|
+
let ret = await firstValueFrom(this.http.get(GET_Director_GetDynamicViews));
|
|
119
|
+
return ret;
|
|
120
|
+
}
|
|
121
|
+
async getServerAudits(sv) {
|
|
122
|
+
let ret = await firstValueFrom(this.http.post(POST_Director_GetServerAudits, sv));
|
|
123
|
+
return ret;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
AdminModuleBaseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AdminModuleBaseService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
127
|
+
AdminModuleBaseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AdminModuleBaseService });
|
|
128
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AdminModuleBaseService, decorators: [{
|
|
129
|
+
type: Injectable
|
|
130
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tbW9kdWxlLmJhc2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkbWluLW1vZHVsZS9zcmMvbGliL3NlcnZpY2VzL2FkbWluLW1vZHVsZS5iYXNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELEtBQUs7QUFDTCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSXBELE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFhdEQseUJBQXlCO0FBQ3pCLE1BQU0sdUNBQXVDLEdBQVcsMENBQTBDLENBQUM7QUFDbkcsTUFBTSwyQkFBMkIsR0FBVyw4QkFBOEIsQ0FBQztBQUMzRSxNQUFNLDhCQUE4QixHQUFXLHVDQUF1QyxDQUFDO0FBQ3ZGLE1BQU0scUJBQXFCLEdBQVcsd0JBQXdCLENBQUM7QUFDL0QsTUFBTSx1QkFBdUIsR0FBVywwQkFBMEIsQ0FBQztBQUNuRSxNQUFNLHdCQUF3QixHQUFXLDBCQUEwQixDQUFDO0FBQ3BFLE1BQU0sa0NBQWtDLEdBQVcsb0NBQW9DLENBQUM7QUFDeEYsTUFBTSw2QkFBNkIsR0FBVywrQkFBK0IsQ0FBQztBQUM5RSxNQUFNLGdDQUFnQyxHQUFXLGtDQUFrQyxDQUFDO0FBQ3BGLE1BQU0sNEJBQTRCLEdBQVcsOEJBQThCLENBQUM7QUFDNUUsTUFBTSwwQkFBMEIsR0FBVyw2QkFBNkIsQ0FBQztBQUN6RSxNQUFNLDRCQUE0QixHQUFXLCtCQUErQixDQUFDO0FBQzdFLE1BQU0sOEJBQThCLEdBQVcsZ0NBQWdD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LEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFhO1FBQ3JDLElBQUksR0FBRyxHQUFjLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFZLDRCQUE0QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkcsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRU0sS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQW9CO1FBQ2hELElBQUksR0FBRyxHQUFxQixNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBbUIsZ0NBQWdDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6SCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZTtRQUN4QixJQUFJLEdBQUcsR0FBZSxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBYSw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7UUFDcEcsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFjO1FBQ3ZDLElBQUksR0FBRyxHQUFlLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFhLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUcsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDOztvSEFuSFEsc0JBQXNCO3dIQUF0QixzQkFBc0I7NEZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcblxyXG4vLyBFU1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBIVFRQU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvaHR0cHNlcnZpY2VcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IFByb2Nlc3Nlc1ZpZXcgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvbmVudHMvUHJvY2Vzc2VzVmlld1wiO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgY2F0Y2hFcnJvciwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9kb21haW5cIjtcclxuaW1wb3J0IHsgVG9wQWN0aXZpdGllc0RhdGFWaWV3IH0gZnJvbSBcIi4uL21vZGVscy9jb21wb25lbnRzL1RvcEFjdGl2aXRpZXNEYXRhVmlld1wiO1xyXG5pbXBvcnQgeyBEaXJlY3RvckluZm9zIH0gZnJvbSBcIi4uL21vZGVscy9jb21wb25lbnRzL0RpcmVjdG9ySW5mb3NcIjtcclxuaW1wb3J0IHsgTm9kZVN0YXRzIH0gZnJvbSBcIi4uL21vZGVscy9jb21wb25lbnRzL05vZGVTdGF0c1wiO1xyXG5pbXBvcnQgeyBTZXNzaW9uU3RhdHMgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvbmVudHMvU2Vzc2lvblN0YXRzXCI7XHJcbmltcG9ydCB7IFByb2ZpbGVyRGF0YU5vZGVzVmlldyB9IGZyb20gXCIuLi9tb2RlbHMvY29tcG9uZW50cy9Qcm9maWxlckRhdGFOb2Rlc1ZpZXdcIjtcclxuaW1wb3J0IHsgTWV0cmljc1ZpZXcgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvbmVudHMvTWV0cmljc1ZpZXdcIjtcclxuaW1wb3J0IHsgTWV0cmljIH0gZnJvbSBcIi4uL21vZGVscy9jb21wb25lbnRzL01ldHJpY1wiO1xyXG5pbXBvcnQgeyBMb2Nrc1ZpZXcgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvbmVudHMvTG9ja3NWaWV3XCI7XHJcbmltcG9ydCB7IER5bmFtaWNWaWV3c1ZpZXcgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvbmVudHMvRHluYW1pY1ZpZXdzVmlld1wiO1xyXG5pbXBvcnQgeyBBdWRpdHNWaWV3IH0gZnJvbSBcIi4uL21vZGVscy9jb21wb25lbnRzL0F1ZGl0c1ZpZXdcIjtcclxuXHJcbi8vIENoaWFtYXRlIGFpIFJlcG9zaXRvcnlcclxuY29uc3QgR0VUX0RpcmVjdG9yX0NoYW5nZVByb2Nlc3NDb25zdW1lckdyb3VwOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvQ2hhbmdlUHJvY2Vzc0NvbnN1bWVyR3JvdXBcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0NsZWFyQWxsQ2FjaGVzOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvQ2xlYXJBbGxDYWNoZXNcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0dldENvbnN1bWVyR3JvdXBzOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvR2V0Q29uc3VtZXJHcm91cHMjY2FjaGVcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0dldEluZm9zOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvR2V0SW5mb3NcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0dldE1ldHJpY3M6IHN0cmluZyA9IFwiL2FwaS9EaXJlY3Rvci9HZXRNZXRyaWNzXCI7XHJcbmNvbnN0IFBPU1RfRGlyZWN0b3JfR2V0TWV0cmljczogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0dldE1ldHJpY3NcIjtcclxuY29uc3QgUE9TVF9EaXJlY3Rvcl9HZXRQcm9maWxlckRhdGFOb2Rlczogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0dldFByb2ZpbGVyRGF0YU5vZGVzXCI7XHJcbmNvbnN0IFBPU1RfRGlyZWN0b3JfR2V0U2VydmVyQXVkaXRzOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvR2V0U2VydmVyQXVkaXRzXCI7XHJcbmNvbnN0IFBPU1RfRGlyZWN0b3JfR2V0RHluYW1pY1ZpZXdEYXRhOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvR2V0RHluYW1pY1ZpZXdEYXRhXCI7XHJcbmNvbnN0IFBPU1RfRGlyZWN0b3JfR2V0U2VydmVyTG9ja3M6IHN0cmluZyA9IFwiL2FwaS9EaXJlY3Rvci9HZXRTZXJ2ZXJMb2Nrc1wiO1xyXG5jb25zdCBHRVRfRGlyZWN0b3JfR2V0U2VydmVyTG9nczogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0dldFNlcnZlckxvZ3NcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0dldER5bmFtaWNWaWV3czogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0dldER5bmFtaWNWaWV3c1wiO1xyXG5jb25zdCBQT1NUX0RpcmVjdG9yX0dldFNlcnZlcldvcmtlcnM6IHN0cmluZyA9IFwiL2FwaS9EaXJlY3Rvci9HZXRTZXJ2ZXJXb3JrZXJzXCI7XHJcbmNvbnN0IFBPU1RfRGlyZWN0b3JfR2V0VG9wQWN0aXZpdGllczogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0dldFRvcEFjdGl2aXRpZXNcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0dldFdvcmtlclN0YXR1czogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0dldFdvcmtlclN0YXR1c1wiO1xyXG5jb25zdCBHRVRfRGlyZWN0b3JfSW52YWxpZGF0ZVNlcnZlclNpZGVDYWNoZTogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0ludmFsaWRhdGVTZXJ2ZXJTaWRlQ2FjaGVcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0tpbGxQcm9jZXNzOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvS2lsbFByb2Nlc3NcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX1NldFByb2Nlc3NUcmFjaW5nOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvU2V0UHJvY2Vzc1RyYWNpbmdcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX1N0YXJ0V29ya2VyOiBzdHJpbmcgPSBcIi9hcGkvRGlyZWN0b3IvU3RhcnRXb3JrZXJcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX1N0b3BXb3JrZXI6IHN0cmluZyA9IFwiL2FwaS9EaXJlY3Rvci9TdG9wV29ya2VyXCI7XHJcbmNvbnN0IEdFVF9EaXJlY3Rvcl9HZXROb2RlU3RhdHM6IHN0cmluZyA9IFwiL2FwaS9EaXJlY3Rvci9HZXROb2RlU3RhdHNcIjtcclxuY29uc3QgR0VUX0RpcmVjdG9yX0dldFNlc3Npb25TdGF0czogc3RyaW5nID0gXCIvYXBpL0RpcmVjdG9yL0dldFNlc3Npb25TdGF0c1wiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQWRtaW5Nb2R1bGVCYXNlU2VydmljZSB7XHJcbiAgICBwdWJsaWMgaHR0cDogSFRUUFNlcnZpY2U7XHJcbiAgICBwdWJsaWMgbXNnRXh0czogTWVzc2FnZVNlcnZpY2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICB0aGlzLmh0dHAgPSB0aGlzLmluamVjdG9yLmdldChIVFRQU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5tc2dFeHRzID0gdGhpcy5pbmplY3Rvci5nZXQoTWVzc2FnZVNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRTZXJ2ZXJXb3JrZXJzKHN2OiBQcm9jZXNzZXNWaWV3KTogUHJvbWlzZTxQcm9jZXNzZXNWaWV3PiB7XHJcbiAgICAgICAgbGV0IHJldDogUHJvY2Vzc2VzVmlldyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PFByb2Nlc3Nlc1ZpZXc+KFBPU1RfRGlyZWN0b3JfR2V0U2VydmVyV29ya2Vycywgc3YpKTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBkb1NldFByb2Nlc3NUcmFjaW5nKGluc3RhbmNlaWQ6IHN0cmluZywgc2lkOiBzdHJpbmcsIHNlcmlhbDogc3RyaW5nLCBlbmFibGU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgdmFyIHBhcnMgPSBuZXcgSHR0cFBhcmFtcygpXHJcbiAgICAgICAgICAgIC5zZXQoXCJpbnN0YW5jZWlkXCIsIGluc3RhbmNlaWQpXHJcbiAgICAgICAgICAgIC5zZXQoXCJzaWRcIiwgc2lkKVxyXG4gICAgICAgICAgICAuc2V0KFwic2VyaWFsXCIsIHNlcmlhbClcclxuICAgICAgICAgICAgLnNldChcImVuYWJsZVwiLCBlbmFibGUpO1xyXG5cclxuICAgICAgICBsZXQgcmV0OiBzdHJpbmcgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PHN0cmluZz4oR0VUX0RpcmVjdG9yX1NldFByb2Nlc3NUcmFjaW5nLCBwYXJzKSk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZG9LaWxsUHJvY2VzcyhpbnN0YW5jZWlkOiBzdHJpbmcsIHNpZDogc3RyaW5nLCBzZXJpYWw6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgdmFyIHBhcnMgPSBuZXcgSHR0cFBhcmFtcygpXHJcbiAgICAgICAgICAgIC5zZXQoXCJpbnN0YW5jZWlkXCIsIGluc3RhbmNlaWQpXHJcbiAgICAgICAgICAgIC5zZXQoXCJzaWRcIiwgc2lkKVxyXG4gICAgICAgICAgICAuc2V0KFwic2VyaWFsXCIsIHNlcmlhbCk7XHJcblxyXG4gICAgICAgIGxldCByZXQ6IHN0cmluZyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8c3RyaW5nPihHRVRfRGlyZWN0b3JfS2lsbFByb2Nlc3MsIHBhcnMpKTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBkb0NoYW5nZVByb2Nlc3NDb25zdW1lckdyb3VwKGluc3RhbmNlaWQ6IHN0cmluZywgc2lkOiBzdHJpbmcsIHNlcmlhbDogc3RyaW5nLCBjb25zdW1lckdyb3VwOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHZhciBwYXJzID0gbmV3IEh0dHBQYXJhbXMoKVxyXG4gICAgICAgICAgICAuc2V0KFwiaW5zdGFuY2VpZFwiLCBpbnN0YW5jZWlkKVxyXG4gICAgICAgICAgICAuc2V0KFwic2lkXCIsIHNpZClcclxuICAgICAgICAgICAgLnNldChcInNlcmlhbFwiLCBzZXJpYWwpXHJcbiAgICAgICAgICAgIC5zZXQoXCJjb25zdW1lcl9ncm91cFwiLCBjb25zdW1lckdyb3VwKTtcclxuXHJcbiAgICAgICAgbGV0IHJldDogc3RyaW5nID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLmdldDxzdHJpbmc+KEdFVF9EaXJlY3Rvcl9DaGFuZ2VQcm9jZXNzQ29uc3VtZXJHcm91cCwgcGFycykpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldENvbnN1bWVyR3JvdXBzKCk6IFByb21pc2U8S2V5VmFsdWVbXT4ge1xyXG4gICAgICAgIGxldCByZXQ6IEtleVZhbHVlW10gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PEtleVZhbHVlW10+KEdFVF9EaXJlY3Rvcl9HZXRDb25zdW1lckdyb3VwcykpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldFNlcnZlckxvZ3MoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBsZXQgcmV0OiBzdHJpbmcgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PHN0cmluZz4oR0VUX0RpcmVjdG9yX0dldFNlcnZlckxvZ3MpKTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRUb3BBY3Rpdml0aWVzKHN2OiBUb3BBY3Rpdml0aWVzRGF0YVZpZXcpOiBQcm9taXNlPFRvcEFjdGl2aXRpZXNEYXRhVmlldz4ge1xyXG4gICAgICAgIGxldCByZXQ6IFRvcEFjdGl2aXRpZXNEYXRhVmlldyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PFRvcEFjdGl2aXRpZXNEYXRhVmlldz4oUE9TVF9EaXJlY3Rvcl9HZXRUb3BBY3Rpdml0aWVzLCBzdikpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldEluZm9zKCk6IFByb21pc2U8RGlyZWN0b3JJbmZvcz4ge1xyXG4gICAgICAgIGxldCByZXQ6IERpcmVjdG9ySW5mb3MgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PERpcmVjdG9ySW5mb3M+KEdFVF9EaXJlY3Rvcl9HZXRJbmZvcywgbnVsbCwgbnVsbCwgZmFsc2UpLnBpcGUoY2F0Y2hFcnJvcihfID0+IG9mKG51bGwgYXMgRGlyZWN0b3JJbmZvcykpKSk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0Tm9kZVN0YXRzKG5vZGVJZDogc3RyaW5nKTogUHJvbWlzZTxOb2RlU3RhdHM+IHtcclxuICAgICAgICBsZXQgcGFycyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KFwibm9kZUlkXCIsIG5vZGVJZCk7XHJcbiAgICAgICAgbGV0IHJldDogTm9kZVN0YXRzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLmdldDxOb2RlU3RhdHM+KEdFVF9EaXJlY3Rvcl9HZXROb2RlU3RhdHMsIHBhcnMpKTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRTZXNzaW9uU3RhdHMoc2lkOiBzdHJpbmcsIHNlcmlhbDogc3RyaW5nKTogUHJvbWlzZTxTZXNzaW9uU3RhdHM+IHtcclxuICAgICAgICBsZXQgcGFycyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdzaWQnLCBzaWQpLnNldCgnc2VyaWFsJywgc2VyaWFsKTtcclxuICAgICAgICBsZXQgcmV0OiBTZXNzaW9uU3RhdHMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PFNlc3Npb25TdGF0cz4oR0VUX0RpcmVjdG9yX0dldFNlc3Npb25TdGF0cywgcGFycykpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldFByb2ZpbGVyRGF0YU5vZGVzKHN2OiBQcm9maWxlckRhdGFOb2Rlc1ZpZXcpOiBQcm9taXNlPFByb2ZpbGVyRGF0YU5vZGVzVmlldz4ge1xyXG4gICAgICAgIGxldCByZXQ6IFByb2ZpbGVyRGF0YU5vZGVzVmlldyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PFByb2ZpbGVyRGF0YU5vZGVzVmlldz4oUE9TVF9EaXJlY3Rvcl9HZXRQcm9maWxlckRhdGFOb2Rlcywgc3YpKTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRNZXRyaWNzKHN2OiBNZXRyaWNzVmlldyk6IFByb21pc2U8TWV0cmljc1ZpZXc+IHtcclxuICAgICAgICBsZXQgcmV0OiBNZXRyaWNzVmlldyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PE1ldHJpY3NWaWV3PihQT1NUX0RpcmVjdG9yX0dldE1ldHJpY3MsIHN2KSk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0TWV0cmljc0xpc3QoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogUHJvbWlzZTxNZXRyaWNbXT4ge1xyXG4gICAgICAgIGxldCBwYXJzID0gbmV3IEh0dHBQYXJhbXMoKVxyXG4gICAgICAgICAgICAuc2V0KFwiZnJvbVwiLCBmcm9tIHx8IFwiXCIpXHJcbiAgICAgICAgICAgIC5zZXQoXCJ0b1wiLCB0byB8fCBcIlwiKTtcclxuXHJcbiAgICAgICAgbGV0IHJldDogTWV0cmljW10gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PE1ldHJpY1tdPihHRVRfRGlyZWN0b3JfR2V0TWV0cmljcywgcGFycykpO1xyXG4gICAgICAgIHJldHVybiByZXQuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldFNlcnZlckxvY2tzKHN2OiBMb2Nrc1ZpZXcpOiBQcm9taXNlPExvY2tzVmlldz4ge1xyXG4gICAgICAgIGxldCByZXQ6IExvY2tzVmlldyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PExvY2tzVmlldz4oUE9TVF9EaXJlY3Rvcl9HZXRTZXJ2ZXJMb2Nrcywgc3YpKTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXREeW5hbWljVmlld0RhdGEoc3Y6IER5bmFtaWNWaWV3c1ZpZXcpOiBQcm9taXNlPER5bmFtaWNWaWV3c1ZpZXc+IHtcclxuICAgICAgICBsZXQgcmV0OiBEeW5hbWljVmlld3NWaWV3ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLnBvc3Q8RHluYW1pY1ZpZXdzVmlldz4oUE9TVF9EaXJlY3Rvcl9HZXREeW5hbWljVmlld0RhdGEsIHN2KSk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0RHluYW1pY1ZpZXdzKCk6IFByb21pc2U8S2V5VmFsdWVbXT4ge1xyXG4gICAgICAgIGxldCByZXQ6IEtleVZhbHVlW10gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PEtleVZhbHVlW10+KEdFVF9EaXJlY3Rvcl9HZXREeW5hbWljVmlld3MpKTtcclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRTZXJ2ZXJBdWRpdHMoc3Y6IEF1ZGl0c1ZpZXcpOiBQcm9taXNlPEF1ZGl0c1ZpZXc+IHtcclxuICAgICAgICBsZXQgcmV0OiBBdWRpdHNWaWV3ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLnBvc3Q8QXVkaXRzVmlldz4oUE9TVF9EaXJlY3Rvcl9HZXRTZXJ2ZXJBdWRpdHMsIHN2KSk7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxufSJdfQ==
|