@robhan-cdk-lib/aws_aps 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +6933 -0
- package/API.md +3389 -0
- package/LICENSE +19 -0
- package/README.md +64 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +23 -0
- package/lib/rule-groups-namespace-base.d.ts +39 -0
- package/lib/rule-groups-namespace-base.js +12 -0
- package/lib/rule-groups-namespace.d.ts +87 -0
- package/lib/rule-groups-namespace.js +83 -0
- package/lib/scraper-base.d.ts +146 -0
- package/lib/scraper-base.js +15 -0
- package/lib/scraper.d.ts +111 -0
- package/lib/scraper.js +108 -0
- package/lib/validation/rule-groups-namespace-base.d.ts +21 -0
- package/lib/validation/rule-groups-namespace-base.js +46 -0
- package/lib/validation/scraper-base.d.ts +7 -0
- package/lib/validation/scraper-base.js +147 -0
- package/lib/validation/workspace-base.d.ts +11 -0
- package/lib/validation/workspace-base.js +260 -0
- package/lib/workspace-base.d.ts +217 -0
- package/lib/workspace-base.js +15 -0
- package/lib/workspace.d.ts +140 -0
- package/lib/workspace.js +102 -0
- package/package.json +156 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateLoggingConfiguration = validateLoggingConfiguration;
|
|
4
|
+
exports.validateCloudWatchLogDestination = validateCloudWatchLogDestination;
|
|
5
|
+
exports.validateLoggingFilter = validateLoggingFilter;
|
|
6
|
+
exports.validateLoggingDestination = validateLoggingDestination;
|
|
7
|
+
exports.validateQueryLoggingConfiguration = validateQueryLoggingConfiguration;
|
|
8
|
+
exports.validateLimitsPerLabelSetEntry = validateLimitsPerLabelSetEntry;
|
|
9
|
+
exports.validateLabel = validateLabel;
|
|
10
|
+
exports.validateLimitsPerLabelSet = validateLimitsPerLabelSet;
|
|
11
|
+
exports.validateWorkspaceConfiguration = validateWorkspaceConfiguration;
|
|
12
|
+
exports.validateAlertManagerDefinition = validateAlertManagerDefinition;
|
|
13
|
+
exports.validateAlias = validateAlias;
|
|
14
|
+
const utils_1 = require("@robhan-cdk-lib/utils");
|
|
15
|
+
function validateLoggingConfiguration(loggingConfiguration) {
|
|
16
|
+
const errors = [];
|
|
17
|
+
if (typeof loggingConfiguration !== 'object') {
|
|
18
|
+
errors.push('must be an object');
|
|
19
|
+
return errors; // No need to check further if not an object
|
|
20
|
+
}
|
|
21
|
+
const loggingConfigurationObject = loggingConfiguration;
|
|
22
|
+
errors.push(...(0, utils_1.validateObjectAttributes)({
|
|
23
|
+
inputObject: loggingConfigurationObject,
|
|
24
|
+
mandatoryAttributes: [],
|
|
25
|
+
optionalAttributes: ['logGroup'],
|
|
26
|
+
}));
|
|
27
|
+
return errors;
|
|
28
|
+
}
|
|
29
|
+
function validateCloudWatchLogDestination(cloudWatchLogDestination) {
|
|
30
|
+
const errors = [];
|
|
31
|
+
if (typeof cloudWatchLogDestination !== 'object') {
|
|
32
|
+
errors.push('must be an object');
|
|
33
|
+
return errors; // No need to check further if not an object
|
|
34
|
+
}
|
|
35
|
+
const cloudWatchLogDestinationObject = cloudWatchLogDestination;
|
|
36
|
+
errors.push(...(0, utils_1.validateObjectAttributes)({
|
|
37
|
+
inputObject: cloudWatchLogDestinationObject,
|
|
38
|
+
mandatoryAttributes: ['logGroup'],
|
|
39
|
+
optionalAttributes: [],
|
|
40
|
+
}));
|
|
41
|
+
return errors;
|
|
42
|
+
}
|
|
43
|
+
function validateLoggingFilter(loggingFilter) {
|
|
44
|
+
const errors = [];
|
|
45
|
+
if (typeof loggingFilter !== 'object') {
|
|
46
|
+
errors.push('must be an object');
|
|
47
|
+
return errors; // No need to check further if not an object
|
|
48
|
+
}
|
|
49
|
+
const loggingFilterObject = loggingFilter;
|
|
50
|
+
errors.push(...(0, utils_1.validateObjectAttributes)({
|
|
51
|
+
inputObject: loggingFilterObject,
|
|
52
|
+
mandatoryAttributes: ['qspThreshold'],
|
|
53
|
+
optionalAttributes: [],
|
|
54
|
+
}));
|
|
55
|
+
if (loggingFilterObject.qspThreshold !== undefined) {
|
|
56
|
+
if (typeof loggingFilterObject.qspThreshold !== 'number') {
|
|
57
|
+
errors.push('qspThreshold: must be a number');
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
errors.push(...(0, utils_1.validateNumberRange)({
|
|
61
|
+
value: loggingFilterObject.qspThreshold,
|
|
62
|
+
min: 0,
|
|
63
|
+
messagePrefix: 'qspThreshold: ',
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return errors;
|
|
68
|
+
}
|
|
69
|
+
function validateLoggingDestination(loggingDestination) {
|
|
70
|
+
const errors = [];
|
|
71
|
+
if (typeof loggingDestination !== 'object') {
|
|
72
|
+
errors.push('must be an object');
|
|
73
|
+
return errors; // No need to check further if not an object
|
|
74
|
+
}
|
|
75
|
+
const loggingDestinationObject = loggingDestination;
|
|
76
|
+
errors.push(...(0, utils_1.validateObjectAttributes)({
|
|
77
|
+
inputObject: loggingDestinationObject,
|
|
78
|
+
mandatoryAttributes: ['cloudWatchLogs', 'filters'],
|
|
79
|
+
optionalAttributes: [],
|
|
80
|
+
}));
|
|
81
|
+
if (loggingDestinationObject.cloudWatchLogs !== undefined) {
|
|
82
|
+
errors.push(...validateCloudWatchLogDestination(loggingDestinationObject.cloudWatchLogs).map((err) => `cloudWatchLogs: ${err}`));
|
|
83
|
+
}
|
|
84
|
+
if (loggingDestinationObject.filters !== undefined) {
|
|
85
|
+
errors.push(...validateLoggingFilter(loggingDestinationObject.filters).map((err) => `filters: ${err}`));
|
|
86
|
+
}
|
|
87
|
+
return errors;
|
|
88
|
+
}
|
|
89
|
+
function validateQueryLoggingConfiguration(queryLoggingConfiguration) {
|
|
90
|
+
const errors = [];
|
|
91
|
+
if (typeof queryLoggingConfiguration !== 'object') {
|
|
92
|
+
errors.push('must be an object');
|
|
93
|
+
return errors; // No need to check further if not an object
|
|
94
|
+
}
|
|
95
|
+
const queryLoggingConfigurationObject = queryLoggingConfiguration;
|
|
96
|
+
errors.push(...(0, utils_1.validateObjectAttributes)({
|
|
97
|
+
inputObject: queryLoggingConfigurationObject,
|
|
98
|
+
mandatoryAttributes: ['destinations'],
|
|
99
|
+
optionalAttributes: [],
|
|
100
|
+
}));
|
|
101
|
+
if (queryLoggingConfigurationObject.destinations !== undefined) {
|
|
102
|
+
errors.push(...queryLoggingConfigurationObject.destinations.map((d, i) => {
|
|
103
|
+
return validateLoggingDestination(d).map((err) => `destinations[${i}]: ${err}`);
|
|
104
|
+
}).flat());
|
|
105
|
+
}
|
|
106
|
+
return errors;
|
|
107
|
+
}
|
|
108
|
+
function validateLimitsPerLabelSetEntry(limitsPerLabelSetEntry) {
|
|
109
|
+
const errors = [];
|
|
110
|
+
if (typeof limitsPerLabelSetEntry !== 'object') {
|
|
111
|
+
errors.push('must be an object');
|
|
112
|
+
return errors; // No need to check further if not an object
|
|
113
|
+
}
|
|
114
|
+
const limitsPerLabelSetEntryObject = limitsPerLabelSetEntry;
|
|
115
|
+
errors.push(...(0, utils_1.validateObjectAttributes)({
|
|
116
|
+
inputObject: limitsPerLabelSetEntryObject,
|
|
117
|
+
mandatoryAttributes: [],
|
|
118
|
+
optionalAttributes: ['maxSeries'],
|
|
119
|
+
}));
|
|
120
|
+
if (limitsPerLabelSetEntryObject.maxSeries !== undefined) {
|
|
121
|
+
if (typeof limitsPerLabelSetEntryObject.maxSeries !== 'number') {
|
|
122
|
+
errors.push('maxSeries: must be a number');
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
errors.push(...(0, utils_1.validateNumberRange)({
|
|
126
|
+
value: limitsPerLabelSetEntryObject.maxSeries,
|
|
127
|
+
min: 0,
|
|
128
|
+
messagePrefix: 'maxSeries: ',
|
|
129
|
+
}));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return errors;
|
|
133
|
+
}
|
|
134
|
+
function validateLabel(label) {
|
|
135
|
+
const errors = [];
|
|
136
|
+
if (typeof label !== 'object') {
|
|
137
|
+
errors.push('must be an object');
|
|
138
|
+
return errors; // No need to check further if not an object
|
|
139
|
+
}
|
|
140
|
+
const labelObject = label;
|
|
141
|
+
errors.push(...(0, utils_1.validateObjectAttributes)({
|
|
142
|
+
inputObject: labelObject,
|
|
143
|
+
mandatoryAttributes: ['name', 'value'],
|
|
144
|
+
optionalAttributes: [],
|
|
145
|
+
}));
|
|
146
|
+
if (labelObject.name !== undefined) {
|
|
147
|
+
if (typeof labelObject.name !== 'string') {
|
|
148
|
+
errors.push('name: must be a string');
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
errors.push(...(0, utils_1.validateRegExp)({
|
|
152
|
+
regExp: /^[a-zA-Z_][a-zA-Z0-9_]*$/,
|
|
153
|
+
value: labelObject.name,
|
|
154
|
+
messagePrefix: 'name: ',
|
|
155
|
+
}));
|
|
156
|
+
errors.push(...(0, utils_1.validateStringLength)({
|
|
157
|
+
value: labelObject.name,
|
|
158
|
+
min: 1,
|
|
159
|
+
}));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (labelObject.value !== undefined) {
|
|
163
|
+
if (typeof labelObject.value !== 'string') {
|
|
164
|
+
errors.push('value: must be a string');
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
errors.push(...(0, utils_1.validateStringLength)({
|
|
168
|
+
value: labelObject.value,
|
|
169
|
+
min: 1,
|
|
170
|
+
messagePrefix: 'value: ',
|
|
171
|
+
}));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return errors;
|
|
175
|
+
}
|
|
176
|
+
function validateLimitsPerLabelSet(limitsPerLabelSet) {
|
|
177
|
+
const errors = [];
|
|
178
|
+
if (typeof limitsPerLabelSet !== 'object') {
|
|
179
|
+
errors.push('must be an object');
|
|
180
|
+
return errors; // No need to check further if not an object
|
|
181
|
+
}
|
|
182
|
+
const limitsPerLabelSetObject = limitsPerLabelSet;
|
|
183
|
+
errors.push(...(0, utils_1.validateObjectAttributes)({
|
|
184
|
+
inputObject: limitsPerLabelSetObject,
|
|
185
|
+
mandatoryAttributes: ['labelSet', 'limits'],
|
|
186
|
+
optionalAttributes: [],
|
|
187
|
+
}));
|
|
188
|
+
if (limitsPerLabelSetObject.labelSet !== undefined) {
|
|
189
|
+
errors.push(...limitsPerLabelSetObject.labelSet.map((l, i) => {
|
|
190
|
+
return validateLabel(l).map((err) => `labelSet[${i}]: ${err}`);
|
|
191
|
+
}).flat());
|
|
192
|
+
}
|
|
193
|
+
if (limitsPerLabelSetObject.limits !== undefined) {
|
|
194
|
+
errors.push(...validateLimitsPerLabelSetEntry(limitsPerLabelSetObject.limits).map((err) => `limits: ${err}`));
|
|
195
|
+
}
|
|
196
|
+
return errors;
|
|
197
|
+
}
|
|
198
|
+
function validateWorkspaceConfiguration(workspaceConfiguration) {
|
|
199
|
+
const errors = [];
|
|
200
|
+
if (typeof workspaceConfiguration !== 'object') {
|
|
201
|
+
errors.push('must be an object');
|
|
202
|
+
return errors; // No need to check further if not an object
|
|
203
|
+
}
|
|
204
|
+
const workspaceConfigurationObject = workspaceConfiguration;
|
|
205
|
+
errors.push(...(0, utils_1.validateObjectAttributes)({
|
|
206
|
+
inputObject: workspaceConfigurationObject,
|
|
207
|
+
mandatoryAttributes: [],
|
|
208
|
+
optionalAttributes: ['limitsPerLabelSets', 'retentionPeriodInDays'],
|
|
209
|
+
}));
|
|
210
|
+
if (workspaceConfigurationObject.limitsPerLabelSets !== undefined) {
|
|
211
|
+
if (!Array.isArray(workspaceConfigurationObject.limitsPerLabelSets)) {
|
|
212
|
+
errors.push('limitsPerLabelSets: must be an array');
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
errors.push(...(0, utils_1.validateArrayLength)({
|
|
216
|
+
value: workspaceConfigurationObject.limitsPerLabelSets,
|
|
217
|
+
min: 0,
|
|
218
|
+
messagePrefix: 'limitsPerLabelSets: ',
|
|
219
|
+
}));
|
|
220
|
+
errors.push(...workspaceConfigurationObject.limitsPerLabelSets.map((l, i) => {
|
|
221
|
+
return validateLimitsPerLabelSet(l).map((err) => `limitsPerLabelSets[${i}]: ${err}`);
|
|
222
|
+
}).flat());
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (workspaceConfigurationObject.retentionPeriodInDays !== undefined) {
|
|
226
|
+
if (typeof workspaceConfigurationObject.retentionPeriodInDays !== 'number') {
|
|
227
|
+
errors.push('retentionPeriodInDays: must be a number');
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
errors.push(...(0, utils_1.validateNumberRange)({
|
|
231
|
+
value: workspaceConfigurationObject.retentionPeriodInDays,
|
|
232
|
+
min: 1,
|
|
233
|
+
messagePrefix: 'retentionPeriodInDays: ',
|
|
234
|
+
}));
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return errors;
|
|
238
|
+
}
|
|
239
|
+
function validateAlertManagerDefinition(alertManagerDefinition) {
|
|
240
|
+
const errors = [];
|
|
241
|
+
if (typeof alertManagerDefinition !== 'string') {
|
|
242
|
+
errors.push('must be a string');
|
|
243
|
+
return errors; // No need to check further if not a string
|
|
244
|
+
}
|
|
245
|
+
return errors;
|
|
246
|
+
}
|
|
247
|
+
function validateAlias(alias) {
|
|
248
|
+
const errors = [];
|
|
249
|
+
if (typeof alias !== 'string') {
|
|
250
|
+
errors.push('must be a string');
|
|
251
|
+
return errors; // No need to check further if not a string
|
|
252
|
+
}
|
|
253
|
+
errors.push(...(0, utils_1.validateStringLength)({
|
|
254
|
+
value: alias,
|
|
255
|
+
min: 0,
|
|
256
|
+
max: 100,
|
|
257
|
+
}));
|
|
258
|
+
return errors;
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi93b3Jrc3BhY2UtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWFBLG9FQWdCQztBQUVELDRFQWdCQztBQUVELHNEQTZCQztBQUVELGdFQXdCQztBQUVELDhFQXNCQztBQUVELHdFQTRCQztBQUVELHNDQTZDQztBQUVELDhEQTBCQztBQUVELHdFQTRDQztBQUVELHdFQVFDO0FBRUQsc0NBY0M7QUFqVEQsaURBQWlKO0FBYWpKLFNBQWdCLDRCQUE0QixDQUFDLG9CQUE2QjtJQUN4RSxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFFNUIsSUFBSSxPQUFPLG9CQUFvQixLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNqQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLDRDQUE0QztJQUM3RCxDQUFDO0lBRUQsTUFBTSwwQkFBMEIsR0FBRyxvQkFBNEMsQ0FBQztJQUNoRixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBQSxnQ0FBd0IsRUFBQztRQUN0QyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLG1CQUFtQixFQUFFLEVBQUU7UUFDdkIsa0JBQWtCLEVBQUUsQ0FBQyxVQUFVLENBQUM7S0FDakMsQ0FBQyxDQUFDLENBQUM7SUFFSixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBZ0IsZ0NBQWdDLENBQUMsd0JBQWlDO0lBQ2hGLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUU1QixJQUFJLE9BQU8sd0JBQXdCLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDakQsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sTUFBTSxDQUFDLENBQUMsNENBQTRDO0lBQzdELENBQUM7SUFFRCxNQUFNLDhCQUE4QixHQUFHLHdCQUFv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aCwgdmFsaWRhdGVOdW1iZXJSYW5nZSwgdmFsaWRhdGVPYmplY3RBdHRyaWJ1dGVzLCB2YWxpZGF0ZVJlZ0V4cCwgdmFsaWRhdGVTdHJpbmdMZW5ndGggfSBmcm9tICdAcm9iaGFuLWNkay1saWIvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQ2xvdWRXYXRjaExvZ0Rlc3RpbmF0aW9uLFxuICBMb2dnaW5nQ29uZmlndXJhdGlvbixcbiAgTG9nZ2luZ0ZpbHRlcixcbiAgTG9nZ2luZ0Rlc3RpbmF0aW9uLFxuICBRdWVyeUxvZ2dpbmdDb25maWd1cmF0aW9uLFxuICBMaW1pdHNQZXJMYWJlbFNldEVudHJ5LFxuICBMYWJlbCxcbiAgTGltaXRzUGVyTGFiZWxTZXQsXG4gIFdvcmtzcGFjZUNvbmZpZ3VyYXRpb24sXG59IGZyb20gJy4uL3dvcmtzcGFjZS1iYXNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTG9nZ2luZ0NvbmZpZ3VyYXRpb24obG9nZ2luZ0NvbmZpZ3VyYXRpb246IHVua25vd24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAodHlwZW9mIGxvZ2dpbmdDb25maWd1cmF0aW9uICE9PSAnb2JqZWN0Jykge1xuICAgIGVycm9ycy5wdXNoKCdtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYW4gb2JqZWN0XG4gIH1cblxuICBjb25zdCBsb2dnaW5nQ29uZmlndXJhdGlvbk9iamVjdCA9IGxvZ2dpbmdDb25maWd1cmF0aW9uIGFzIExvZ2dpbmdDb25maWd1cmF0aW9uO1xuICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZU9iamVjdEF0dHJpYnV0ZXMoe1xuICAgIGlucHV0T2JqZWN0OiBsb2dnaW5nQ29uZmlndXJhdGlvbk9iamVjdCxcbiAgICBtYW5kYXRvcnlBdHRyaWJ1dGVzOiBbXSxcbiAgICBvcHRpb25hbEF0dHJpYnV0ZXM6IFsnbG9nR3JvdXAnXSxcbiAgfSkpO1xuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNsb3VkV2F0Y2hMb2dEZXN0aW5hdGlvbihjbG91ZFdhdGNoTG9nRGVzdGluYXRpb246IHVua25vd24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAodHlwZW9mIGNsb3VkV2F0Y2hMb2dEZXN0aW5hdGlvbiAhPT0gJ29iamVjdCcpIHtcbiAgICBlcnJvcnMucHVzaCgnbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICByZXR1cm4gZXJyb3JzOyAvLyBObyBuZWVkIHRvIGNoZWNrIGZ1cnRoZXIgaWYgbm90IGFuIG9iamVjdFxuICB9XG5cbiAgY29uc3QgY2xvdWRXYXRjaExvZ0Rlc3RpbmF0aW9uT2JqZWN0ID0gY2xvdWRXYXRjaExvZ0Rlc3RpbmF0aW9uIGFzIENsb3VkV2F0Y2hMb2dEZXN0aW5hdGlvbjtcbiAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVPYmplY3RBdHRyaWJ1dGVzKHtcbiAgICBpbnB1dE9iamVjdDogY2xvdWRXYXRjaExvZ0Rlc3RpbmF0aW9uT2JqZWN0LFxuICAgIG1hbmRhdG9yeUF0dHJpYnV0ZXM6IFsnbG9nR3JvdXAnXSxcbiAgICBvcHRpb25hbEF0dHJpYnV0ZXM6IFtdLFxuICB9KSk7XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTG9nZ2luZ0ZpbHRlcihsb2dnaW5nRmlsdGVyOiB1bmtub3duKTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHR5cGVvZiBsb2dnaW5nRmlsdGVyICE9PSAnb2JqZWN0Jykge1xuICAgIGVycm9ycy5wdXNoKCdtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYW4gb2JqZWN0XG4gIH1cblxuICBjb25zdCBsb2dnaW5nRmlsdGVyT2JqZWN0ID0gbG9nZ2luZ0ZpbHRlciBhcyBMb2dnaW5nRmlsdGVyO1xuICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZU9iamVjdEF0dHJpYnV0ZXMoe1xuICAgIGlucHV0T2JqZWN0OiBsb2dnaW5nRmlsdGVyT2JqZWN0LFxuICAgIG1hbmRhdG9yeUF0dHJpYnV0ZXM6IFsncXNwVGhyZXNob2xkJ10sXG4gICAgb3B0aW9uYWxBdHRyaWJ1dGVzOiBbXSxcbiAgfSkpO1xuXG4gIGlmIChsb2dnaW5nRmlsdGVyT2JqZWN0LnFzcFRocmVzaG9sZCAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICBpZiAodHlwZW9mIGxvZ2dpbmdGaWx0ZXJPYmplY3QucXNwVGhyZXNob2xkICE9PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3JzLnB1c2goJ3FzcFRocmVzaG9sZDogbXVzdCBiZSBhIG51bWJlcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZU51bWJlclJhbmdlKHtcbiAgICAgICAgdmFsdWU6IGxvZ2dpbmdGaWx0ZXJPYmplY3QucXNwVGhyZXNob2xkLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIG1lc3NhZ2VQcmVmaXg6ICdxc3BUaHJlc2hvbGQ6ICcsXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTG9nZ2luZ0Rlc3RpbmF0aW9uKGxvZ2dpbmdEZXN0aW5hdGlvbjogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmICh0eXBlb2YgbG9nZ2luZ0Rlc3RpbmF0aW9uICE9PSAnb2JqZWN0Jykge1xuICAgIGVycm9ycy5wdXNoKCdtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYW4gb2JqZWN0XG4gIH1cblxuICBjb25zdCBsb2dnaW5nRGVzdGluYXRpb25PYmplY3QgPSBsb2dnaW5nRGVzdGluYXRpb24gYXMgTG9nZ2luZ0Rlc3RpbmF0aW9uO1xuICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZU9iamVjdEF0dHJpYnV0ZXMoe1xuICAgIGlucHV0T2JqZWN0OiBsb2dnaW5nRGVzdGluYXRpb25PYmplY3QsXG4gICAgbWFuZGF0b3J5QXR0cmlidXRlczogWydjbG91ZFdhdGNoTG9ncycsICdmaWx0ZXJzJ10sXG4gICAgb3B0aW9uYWxBdHRyaWJ1dGVzOiBbXSxcbiAgfSkpO1xuXG4gIGlmIChsb2dnaW5nRGVzdGluYXRpb25PYmplY3QuY2xvdWRXYXRjaExvZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlQ2xvdWRXYXRjaExvZ0Rlc3RpbmF0aW9uKGxvZ2dpbmdEZXN0aW5hdGlvbk9iamVjdC5jbG91ZFdhdGNoTG9ncykubWFwKChlcnIpID0+IGBjbG91ZFdhdGNoTG9nczogJHtlcnJ9YCkpO1xuICB9XG5cbiAgaWYgKGxvZ2dpbmdEZXN0aW5hdGlvbk9iamVjdC5maWx0ZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUxvZ2dpbmdGaWx0ZXIobG9nZ2luZ0Rlc3RpbmF0aW9uT2JqZWN0LmZpbHRlcnMpLm1hcCgoZXJyKSA9PiBgZmlsdGVyczogJHtlcnJ9YCkpO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUXVlcnlMb2dnaW5nQ29uZmlndXJhdGlvbihxdWVyeUxvZ2dpbmdDb25maWd1cmF0aW9uOiB1bmtub3duKTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHR5cGVvZiBxdWVyeUxvZ2dpbmdDb25maWd1cmF0aW9uICE9PSAnb2JqZWN0Jykge1xuICAgIGVycm9ycy5wdXNoKCdtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYW4gb2JqZWN0XG4gIH1cblxuICBjb25zdCBxdWVyeUxvZ2dpbmdDb25maWd1cmF0aW9uT2JqZWN0ID0gcXVlcnlMb2dnaW5nQ29uZmlndXJhdGlvbiBhcyBRdWVyeUxvZ2dpbmdDb25maWd1cmF0aW9uO1xuICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZU9iamVjdEF0dHJpYnV0ZXMoe1xuICAgIGlucHV0T2JqZWN0OiBxdWVyeUxvZ2dpbmdDb25maWd1cmF0aW9uT2JqZWN0LFxuICAgIG1hbmRhdG9yeUF0dHJpYnV0ZXM6IFsnZGVzdGluYXRpb25zJ10sXG4gICAgb3B0aW9uYWxBdHRyaWJ1dGVzOiBbXSxcbiAgfSkpO1xuXG4gIGlmIChxdWVyeUxvZ2dpbmdDb25maWd1cmF0aW9uT2JqZWN0LmRlc3RpbmF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXJyb3JzLnB1c2goLi4ucXVlcnlMb2dnaW5nQ29uZmlndXJhdGlvbk9iamVjdC5kZXN0aW5hdGlvbnMubWFwKChkLCBpKSA9PiB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVMb2dnaW5nRGVzdGluYXRpb24oZCkubWFwKChlcnIpID0+IGBkZXN0aW5hdGlvbnNbJHtpfV06ICR7ZXJyfWApO1xuICAgIH0pLmZsYXQoKSk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMaW1pdHNQZXJMYWJlbFNldEVudHJ5KGxpbWl0c1BlckxhYmVsU2V0RW50cnk6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAodHlwZW9mIGxpbWl0c1BlckxhYmVsU2V0RW50cnkgIT09ICdvYmplY3QnKSB7XG4gICAgZXJyb3JzLnB1c2goJ211c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgcmV0dXJuIGVycm9yczsgLy8gTm8gbmVlZCB0byBjaGVjayBmdXJ0aGVyIGlmIG5vdCBhbiBvYmplY3RcbiAgfVxuXG4gIGNvbnN0IGxpbWl0c1BlckxhYmVsU2V0RW50cnlPYmplY3QgPSBsaW1pdHNQZXJMYWJlbFNldEVudHJ5IGFzIExpbWl0c1BlckxhYmVsU2V0RW50cnk7XG4gIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlT2JqZWN0QXR0cmlidXRlcyh7XG4gICAgaW5wdXRPYmplY3Q6IGxpbWl0c1BlckxhYmVsU2V0RW50cnlPYmplY3QsXG4gICAgbWFuZGF0b3J5QXR0cmlidXRlczogW10sXG4gICAgb3B0aW9uYWxBdHRyaWJ1dGVzOiBbJ21heFNlcmllcyddLFxuICB9KSk7XG5cbiAgaWYgKGxpbWl0c1BlckxhYmVsU2V0RW50cnlPYmplY3QubWF4U2VyaWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGxpbWl0c1BlckxhYmVsU2V0RW50cnlPYmplY3QubWF4U2VyaWVzICE9PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3JzLnB1c2goJ21heFNlcmllczogbXVzdCBiZSBhIG51bWJlcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZU51bWJlclJhbmdlKHtcbiAgICAgICAgdmFsdWU6IGxpbWl0c1BlckxhYmVsU2V0RW50cnlPYmplY3QubWF4U2VyaWVzLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIG1lc3NhZ2VQcmVmaXg6ICdtYXhTZXJpZXM6ICcsXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGFiZWwobGFiZWw6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAodHlwZW9mIGxhYmVsICE9PSAnb2JqZWN0Jykge1xuICAgIGVycm9ycy5wdXNoKCdtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYW4gb2JqZWN0XG4gIH1cblxuICBjb25zdCBsYWJlbE9iamVjdCA9IGxhYmVsIGFzIExhYmVsO1xuICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZU9iamVjdEF0dHJpYnV0ZXMoe1xuICAgIGlucHV0T2JqZWN0OiBsYWJlbE9iamVjdCxcbiAgICBtYW5kYXRvcnlBdHRyaWJ1dGVzOiBbJ25hbWUnLCAndmFsdWUnXSxcbiAgICBvcHRpb25hbEF0dHJpYnV0ZXM6IFtdLFxuICB9KSk7XG5cbiAgaWYgKGxhYmVsT2JqZWN0Lm5hbWUgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgaWYgKHR5cGVvZiBsYWJlbE9iamVjdC5uYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JzLnB1c2goJ25hbWU6IG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVSZWdFeHAoe1xuICAgICAgICByZWdFeHA6IC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKiQvLFxuICAgICAgICB2YWx1ZTogbGFiZWxPYmplY3QubmFtZSxcbiAgICAgICAgbWVzc2FnZVByZWZpeDogJ25hbWU6ICcsXG4gICAgICB9KSk7XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZ0xlbmd0aCh7XG4gICAgICAgIHZhbHVlOiBsYWJlbE9iamVjdC5uYW1lLFxuICAgICAgICBtaW46IDEsXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxhYmVsT2JqZWN0LnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGxhYmVsT2JqZWN0LnZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3JzLnB1c2goJ3ZhbHVlOiBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlU3RyaW5nTGVuZ3RoKHtcbiAgICAgICAgdmFsdWU6IGxhYmVsT2JqZWN0LnZhbHVlLFxuICAgICAgICBtaW46IDEsXG4gICAgICAgIG1lc3NhZ2VQcmVmaXg6ICd2YWx1ZTogJyxcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMaW1pdHNQZXJMYWJlbFNldChsaW1pdHNQZXJMYWJlbFNldDogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmICh0eXBlb2YgbGltaXRzUGVyTGFiZWxTZXQgIT09ICdvYmplY3QnKSB7XG4gICAgZXJyb3JzLnB1c2goJ211c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgcmV0dXJuIGVycm9yczsgLy8gTm8gbmVlZCB0byBjaGVjayBmdXJ0aGVyIGlmIG5vdCBhbiBvYmplY3RcbiAgfVxuXG4gIGNvbnN0IGxpbWl0c1BlckxhYmVsU2V0T2JqZWN0ID0gbGltaXRzUGVyTGFiZWxTZXQgYXMgTGltaXRzUGVyTGFiZWxTZXQ7XG4gIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlT2JqZWN0QXR0cmlidXRlcyh7XG4gICAgaW5wdXRPYmplY3Q6IGxpbWl0c1BlckxhYmVsU2V0T2JqZWN0LFxuICAgIG1hbmRhdG9yeUF0dHJpYnV0ZXM6IFsnbGFiZWxTZXQnLCAnbGltaXRzJ10sXG4gICAgb3B0aW9uYWxBdHRyaWJ1dGVzOiBbXSxcbiAgfSkpO1xuXG4gIGlmIChsaW1pdHNQZXJMYWJlbFNldE9iamVjdC5sYWJlbFNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXJyb3JzLnB1c2goLi4ubGltaXRzUGVyTGFiZWxTZXRPYmplY3QubGFiZWxTZXQubWFwKChsLCBpKSA9PiB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVMYWJlbChsKS5tYXAoKGVycikgPT4gYGxhYmVsU2V0WyR7aX1dOiAke2Vycn1gKTtcbiAgICB9KS5mbGF0KCkpO1xuICB9XG5cbiAgaWYgKGxpbWl0c1BlckxhYmVsU2V0T2JqZWN0LmxpbWl0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVMaW1pdHNQZXJMYWJlbFNldEVudHJ5KGxpbWl0c1BlckxhYmVsU2V0T2JqZWN0LmxpbWl0cykubWFwKChlcnIpID0+IGBsaW1pdHM6ICR7ZXJyfWApKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVdvcmtzcGFjZUNvbmZpZ3VyYXRpb24od29ya3NwYWNlQ29uZmlndXJhdGlvbjogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmICh0eXBlb2Ygd29ya3NwYWNlQ29uZmlndXJhdGlvbiAhPT0gJ29iamVjdCcpIHtcbiAgICBlcnJvcnMucHVzaCgnbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgICByZXR1cm4gZXJyb3JzOyAvLyBObyBuZWVkIHRvIGNoZWNrIGZ1cnRoZXIgaWYgbm90IGFuIG9iamVjdFxuICB9XG5cbiAgY29uc3Qgd29ya3NwYWNlQ29uZmlndXJhdGlvbk9iamVjdCA9IHdvcmtzcGFjZUNvbmZpZ3VyYXRpb24gYXMgV29ya3NwYWNlQ29uZmlndXJhdGlvbjtcbiAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVPYmplY3RBdHRyaWJ1dGVzKHtcbiAgICBpbnB1dE9iamVjdDogd29ya3NwYWNlQ29uZmlndXJhdGlvbk9iamVjdCxcbiAgICBtYW5kYXRvcnlBdHRyaWJ1dGVzOiBbXSxcbiAgICBvcHRpb25hbEF0dHJpYnV0ZXM6IFsnbGltaXRzUGVyTGFiZWxTZXRzJywgJ3JldGVudGlvblBlcmlvZEluRGF5cyddLFxuICB9KSk7XG5cbiAgaWYgKHdvcmtzcGFjZUNvbmZpZ3VyYXRpb25PYmplY3QubGltaXRzUGVyTGFiZWxTZXRzICE9PSB1bmRlZmluZWQpIHtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh3b3Jrc3BhY2VDb25maWd1cmF0aW9uT2JqZWN0LmxpbWl0c1BlckxhYmVsU2V0cykpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdsaW1pdHNQZXJMYWJlbFNldHM6IG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVBcnJheUxlbmd0aCh7XG4gICAgICAgIHZhbHVlOiB3b3Jrc3BhY2VDb25maWd1cmF0aW9uT2JqZWN0LmxpbWl0c1BlckxhYmVsU2V0cyxcbiAgICAgICAgbWluOiAwLFxuICAgICAgICBtZXNzYWdlUHJlZml4OiAnbGltaXRzUGVyTGFiZWxTZXRzOiAnLFxuICAgICAgfSkpO1xuICAgICAgZXJyb3JzLnB1c2goLi4ud29ya3NwYWNlQ29uZmlndXJhdGlvbk9iamVjdC5saW1pdHNQZXJMYWJlbFNldHMubWFwKChsLCBpKSA9PiB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUxpbWl0c1BlckxhYmVsU2V0KGwpLm1hcCgoZXJyKSA9PiBgbGltaXRzUGVyTGFiZWxTZXRzWyR7aX1dOiAke2Vycn1gKTtcbiAgICAgIH0pLmZsYXQoKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHdvcmtzcGFjZUNvbmZpZ3VyYXRpb25PYmplY3QucmV0ZW50aW9uUGVyaW9kSW5EYXlzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIHdvcmtzcGFjZUNvbmZpZ3VyYXRpb25PYmplY3QucmV0ZW50aW9uUGVyaW9kSW5EYXlzICE9PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3JzLnB1c2goJ3JldGVudGlvblBlcmlvZEluRGF5czogbXVzdCBiZSBhIG51bWJlcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZU51bWJlclJhbmdlKHtcbiAgICAgICAgdmFsdWU6IHdvcmtzcGFjZUNvbmZpZ3VyYXRpb25PYmplY3QucmV0ZW50aW9uUGVyaW9kSW5EYXlzLFxuICAgICAgICBtaW46IDEsXG4gICAgICAgIG1lc3NhZ2VQcmVmaXg6ICdyZXRlbnRpb25QZXJpb2RJbkRheXM6ICcsXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQWxlcnRNYW5hZ2VyRGVmaW5pdGlvbihhbGVydE1hbmFnZXJEZWZpbml0aW9uOiB1bmtub3duKTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHR5cGVvZiBhbGVydE1hbmFnZXJEZWZpbml0aW9uICE9PSAnc3RyaW5nJykge1xuICAgIGVycm9ycy5wdXNoKCdtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgcmV0dXJuIGVycm9yczsgLy8gTm8gbmVlZCB0byBjaGVjayBmdXJ0aGVyIGlmIG5vdCBhIHN0cmluZ1xuICB9XG4gIHJldHVybiBlcnJvcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUFsaWFzKGFsaWFzOiB1bmtub3duKTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHR5cGVvZiBhbGlhcyAhPT0gJ3N0cmluZycpIHtcbiAgICBlcnJvcnMucHVzaCgnbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIHJldHVybiBlcnJvcnM7IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBpZiBub3QgYSBzdHJpbmdcbiAgfVxuXG4gIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlU3RyaW5nTGVuZ3RoKHtcbiAgICB2YWx1ZTogYWxpYXMsXG4gICAgbWluOiAwLFxuICAgIG1heDogMTAwLFxuICB9KSk7XG4gIHJldHVybiBlcnJvcnM7XG59Il19
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { IResource, Resource } from 'aws-cdk-lib';
|
|
2
|
+
import { IKey } from 'aws-cdk-lib/aws-kms';
|
|
3
|
+
import { ILogGroup } from 'aws-cdk-lib/aws-logs';
|
|
4
|
+
/**
|
|
5
|
+
* Contains information about the rules and alerting logging configuration for the workspace.
|
|
6
|
+
*/
|
|
7
|
+
export interface LoggingConfiguration {
|
|
8
|
+
/**
|
|
9
|
+
* The CloudWatch log group to which the vended log data will be published.
|
|
10
|
+
*/
|
|
11
|
+
readonly logGroup?: ILogGroup;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Configuration details for logging to CloudWatch Logs.
|
|
15
|
+
*/
|
|
16
|
+
export interface CloudWatchLogDestination {
|
|
17
|
+
/**
|
|
18
|
+
* The CloudWatch log group.
|
|
19
|
+
*/
|
|
20
|
+
readonly logGroup: ILogGroup;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Filtering criteria that determine which queries are logged.
|
|
24
|
+
*/
|
|
25
|
+
export interface LoggingFilter {
|
|
26
|
+
/**
|
|
27
|
+
* Integer.
|
|
28
|
+
*
|
|
29
|
+
* Minimum 0
|
|
30
|
+
*/
|
|
31
|
+
readonly qspThreshold: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The logging destination in an Amazon Managed Service for Prometheus workspace.
|
|
35
|
+
*/
|
|
36
|
+
export interface LoggingDestination {
|
|
37
|
+
/**
|
|
38
|
+
* Configuration details for logging to CloudWatch Logs.
|
|
39
|
+
*/
|
|
40
|
+
readonly cloudWatchLogs: CloudWatchLogDestination;
|
|
41
|
+
/**
|
|
42
|
+
* Filtering criteria that determine which queries are logged.
|
|
43
|
+
*/
|
|
44
|
+
readonly filters: LoggingFilter;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The query logging configuration in an Amazon Managed Service for Prometheus workspace.
|
|
48
|
+
*/
|
|
49
|
+
export interface QueryLoggingConfiguration {
|
|
50
|
+
/**
|
|
51
|
+
* Defines a destination and its associated filtering criteria for query logging.
|
|
52
|
+
*
|
|
53
|
+
* Minimum 1 and maximum 1 item in array.
|
|
54
|
+
*/
|
|
55
|
+
readonly destinations: LoggingDestination[];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* This structure contains the limits that apply to time series that match one label set.
|
|
59
|
+
*/
|
|
60
|
+
export interface LimitsPerLabelSetEntry {
|
|
61
|
+
/**
|
|
62
|
+
* The maximum number of active series that can be ingested that match this label set.
|
|
63
|
+
* Setting this to 0 causes no label set limit to be enforced, but it does cause Amazon Managed
|
|
64
|
+
* Service for Prometheus to vend label set metrics to CloudWatch Logs.
|
|
65
|
+
*
|
|
66
|
+
* Minimum 0
|
|
67
|
+
*/
|
|
68
|
+
readonly maxSeries?: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* A label is a name:value pair used to add context to ingested metrics. This structure defines the
|
|
72
|
+
* name and value for one label that is used in a label set. You can set ingestion limits on time
|
|
73
|
+
* series that match defined label sets, to help prevent a workspace from being overwhelmed with
|
|
74
|
+
* unexpected spikes in time series ingestion.
|
|
75
|
+
*/
|
|
76
|
+
export interface Label {
|
|
77
|
+
/**
|
|
78
|
+
* The name for this label.
|
|
79
|
+
*
|
|
80
|
+
* Pattern: ^[a-zA-Z_][a-zA-Z0-9_]*$
|
|
81
|
+
*
|
|
82
|
+
* At least one character.
|
|
83
|
+
*/
|
|
84
|
+
readonly name: string;
|
|
85
|
+
/**
|
|
86
|
+
* The value for this label.
|
|
87
|
+
*
|
|
88
|
+
* At least one character.
|
|
89
|
+
*/
|
|
90
|
+
readonly value: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* This defines a label set for the workspace, and defines the ingestion limit for active time
|
|
94
|
+
* series that match that label set. Each label name in a label set must be unique.
|
|
95
|
+
*/
|
|
96
|
+
export interface LimitsPerLabelSet {
|
|
97
|
+
/**
|
|
98
|
+
* This defines one label set that will have an enforced ingestion limit. You can set ingestion
|
|
99
|
+
* limits on time series that match defined label sets, to help prevent a workspace from being
|
|
100
|
+
* overwhelmed with unexpected spikes in time series ingestion.
|
|
101
|
+
*
|
|
102
|
+
* Label values accept all UTF-8 characters with one exception. If the label name is metric
|
|
103
|
+
* name label __name__, then the metric part of the name must conform to the following pattern:
|
|
104
|
+
* [a-zA-Z_:][a-zA-Z0-9_:]*
|
|
105
|
+
*
|
|
106
|
+
* Minimum 0
|
|
107
|
+
*/
|
|
108
|
+
readonly labelSet: Label[];
|
|
109
|
+
/**
|
|
110
|
+
* This structure contains the information about the limits that apply to time series that
|
|
111
|
+
* match this label set.
|
|
112
|
+
*/
|
|
113
|
+
readonly limits: LimitsPerLabelSetEntry;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Use this structure to define label sets and the ingestion limits for time series that match
|
|
117
|
+
* label sets, and to specify the retention period of the workspace.
|
|
118
|
+
*/
|
|
119
|
+
export interface WorkspaceConfiguration {
|
|
120
|
+
/**
|
|
121
|
+
* This is an array of structures, where each structure defines a label set for the workspace,
|
|
122
|
+
* and defines the ingestion limit for active time series for each of those label sets. Each
|
|
123
|
+
* label name in a label set must be unique.
|
|
124
|
+
*
|
|
125
|
+
* Minimum 0
|
|
126
|
+
*/
|
|
127
|
+
readonly limitsPerLabelSets?: LimitsPerLabelSet[];
|
|
128
|
+
/**
|
|
129
|
+
* Specifies how many days that metrics will be retained in the workspace.
|
|
130
|
+
*
|
|
131
|
+
* Minimum 1
|
|
132
|
+
*/
|
|
133
|
+
readonly retentionPeriodInDays?: number;
|
|
134
|
+
}
|
|
135
|
+
export interface IWorkspace extends IResource {
|
|
136
|
+
/**
|
|
137
|
+
* The alert manager definition, a YAML configuration for the alert manager in your Amazon
|
|
138
|
+
* Managed Service for Prometheus workspace.
|
|
139
|
+
*/
|
|
140
|
+
readonly alertManagerDefinition?: string;
|
|
141
|
+
/**
|
|
142
|
+
* The alias that is assigned to this workspace to help identify it. It does not need to be
|
|
143
|
+
* unique.
|
|
144
|
+
*/
|
|
145
|
+
readonly alias?: string;
|
|
146
|
+
/**
|
|
147
|
+
* The customer managed AWS KMS key to use for encrypting data within your workspace.
|
|
148
|
+
*/
|
|
149
|
+
readonly kmsKey?: IKey;
|
|
150
|
+
/**
|
|
151
|
+
* Contains information about the current rules and alerting logging configuration for the
|
|
152
|
+
* workspace.
|
|
153
|
+
*
|
|
154
|
+
* Note: These logging configurations are only for rules and alerting logs.
|
|
155
|
+
*/
|
|
156
|
+
readonly loggingConfiguration?: LoggingConfiguration;
|
|
157
|
+
/**
|
|
158
|
+
* The definition of logging configuration in an Amazon Managed Service for Prometheus workspace.
|
|
159
|
+
*/
|
|
160
|
+
readonly queryLoggingConfiguration?: QueryLoggingConfiguration;
|
|
161
|
+
/**
|
|
162
|
+
* Use this structure to define label sets and the ingestion limits for time series that match
|
|
163
|
+
* label sets, and to specify the retention period of the workspace.
|
|
164
|
+
*/
|
|
165
|
+
readonly workspaceConfiguration?: WorkspaceConfiguration;
|
|
166
|
+
/**
|
|
167
|
+
* The unique ID for the workspace.
|
|
168
|
+
* @attribute
|
|
169
|
+
*/
|
|
170
|
+
readonly workspaceId: string;
|
|
171
|
+
/**
|
|
172
|
+
* The ARN of the workspace.
|
|
173
|
+
* @attribute
|
|
174
|
+
*/
|
|
175
|
+
readonly workspaceArn: string;
|
|
176
|
+
}
|
|
177
|
+
export declare abstract class WorkspaceBase extends Resource implements IWorkspace {
|
|
178
|
+
/**
|
|
179
|
+
* The alert manager definition, a YAML configuration for the alert manager in your Amazon
|
|
180
|
+
* Managed Service for Prometheus workspace.
|
|
181
|
+
*/
|
|
182
|
+
abstract readonly alertManagerDefinition?: string;
|
|
183
|
+
/**
|
|
184
|
+
* The alias that is assigned to this workspace to help identify it. It does not need to be
|
|
185
|
+
* unique.
|
|
186
|
+
*/
|
|
187
|
+
abstract readonly alias?: string;
|
|
188
|
+
/**
|
|
189
|
+
* The customer managed AWS KMS key to use for encrypting data within your workspace.
|
|
190
|
+
*/
|
|
191
|
+
abstract readonly kmsKey?: IKey;
|
|
192
|
+
/**
|
|
193
|
+
* Contains information about the current rules and alerting logging configuration for the
|
|
194
|
+
* workspace.
|
|
195
|
+
*
|
|
196
|
+
* Note: These logging configurations are only for rules and alerting logs.
|
|
197
|
+
*/
|
|
198
|
+
abstract readonly loggingConfiguration?: LoggingConfiguration;
|
|
199
|
+
/**
|
|
200
|
+
* The definition of logging configuration in an Amazon Managed Service for Prometheus workspace.
|
|
201
|
+
*/
|
|
202
|
+
abstract readonly queryLoggingConfiguration?: QueryLoggingConfiguration;
|
|
203
|
+
/**
|
|
204
|
+
* Use this structure to define label sets and the ingestion limits for time series that match
|
|
205
|
+
* label sets, and to specify the retention period of the workspace.
|
|
206
|
+
*/
|
|
207
|
+
abstract readonly workspaceConfiguration?: WorkspaceConfiguration;
|
|
208
|
+
/**
|
|
209
|
+
* The unique ID for the workspace.
|
|
210
|
+
*/
|
|
211
|
+
abstract readonly workspaceId: string;
|
|
212
|
+
/**
|
|
213
|
+
* The ARN of the workspace.
|
|
214
|
+
*/
|
|
215
|
+
abstract readonly workspaceArn: string;
|
|
216
|
+
protected getWorkspaceId(workspaceArn: string): string;
|
|
217
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.WorkspaceBase = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
|
+
class WorkspaceBase extends aws_cdk_lib_1.Resource {
|
|
8
|
+
getWorkspaceId(workspaceArn) {
|
|
9
|
+
return workspaceArn.substring(workspaceArn.lastIndexOf('/') + 1);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.WorkspaceBase = WorkspaceBase;
|
|
13
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
14
|
+
WorkspaceBase[_a] = { fqn: "@robhan-cdk-lib/aws_aps.WorkspaceBase", version: "0.0.0" };
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd29ya3NwYWNlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBa0Q7QUFvTWxELE1BQXNCLGFBQWMsU0FBUSxzQkFBUTtJQStDeEMsY0FBYyxDQUFDLFlBQW9CO1FBQzNDLE9BQU8sWUFBWSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7O0FBakRILHNDQWtEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElSZXNvdXJjZSwgUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJS2V5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBJTG9nR3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5cbi8qKlxuICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJ1bGVzIGFuZCBhbGVydGluZyBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2luZ0NvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIENsb3VkV2F0Y2ggbG9nIGdyb3VwIHRvIHdoaWNoIHRoZSB2ZW5kZWQgbG9nIGRhdGEgd2lsbCBiZSBwdWJsaXNoZWQuXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cD86IElMb2dHcm91cDtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGRldGFpbHMgZm9yIGxvZ2dpbmcgdG8gQ2xvdWRXYXRjaCBMb2dzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkV2F0Y2hMb2dEZXN0aW5hdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRXYXRjaCBsb2cgZ3JvdXAuXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cDogSUxvZ0dyb3VwO1xufVxuXG4vKipcbiAqIEZpbHRlcmluZyBjcml0ZXJpYSB0aGF0IGRldGVybWluZSB3aGljaCBxdWVyaWVzIGFyZSBsb2dnZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2luZ0ZpbHRlciB7XG4gIC8qKlxuICAgKiBJbnRlZ2VyLlxuICAgKlxuICAgKiBNaW5pbXVtIDBcbiAgICovXG4gIHJlYWRvbmx5IHFzcFRocmVzaG9sZDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBsb2dnaW5nIGRlc3RpbmF0aW9uIGluIGFuIEFtYXpvbiBNYW5hZ2VkIFNlcnZpY2UgZm9yIFByb21ldGhldXMgd29ya3NwYWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2dpbmdEZXN0aW5hdGlvbiB7XG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGRldGFpbHMgZm9yIGxvZ2dpbmcgdG8gQ2xvdWRXYXRjaCBMb2dzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRXYXRjaExvZ3M6IENsb3VkV2F0Y2hMb2dEZXN0aW5hdGlvbjtcbiAgLyoqXG4gICAqIEZpbHRlcmluZyBjcml0ZXJpYSB0aGF0IGRldGVybWluZSB3aGljaCBxdWVyaWVzIGFyZSBsb2dnZWQuXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXJzOiBMb2dnaW5nRmlsdGVyO1xufVxuXG4vKipcbiAqIFRoZSBxdWVyeSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gaW4gYW4gQW1hem9uIE1hbmFnZWQgU2VydmljZSBmb3IgUHJvbWV0aGV1cyB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlMb2dnaW5nQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgZGVzdGluYXRpb24gYW5kIGl0cyBhc3NvY2lhdGVkIGZpbHRlcmluZyBjcml0ZXJpYSBmb3IgcXVlcnkgbG9nZ2luZy5cbiAgICpcbiAgICogTWluaW11bSAxIGFuZCBtYXhpbXVtIDEgaXRlbSBpbiBhcnJheS5cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uczogTG9nZ2luZ0Rlc3RpbmF0aW9uW107XG59XG5cbi8qKlxuICogIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBsaW1pdHMgdGhhdCBhcHBseSB0byB0aW1lIHNlcmllcyB0aGF0IG1hdGNoIG9uZSBsYWJlbCBzZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGltaXRzUGVyTGFiZWxTZXRFbnRyeSB7XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYWN0aXZlIHNlcmllcyB0aGF0IGNhbiBiZSBpbmdlc3RlZCB0aGF0IG1hdGNoIHRoaXMgbGFiZWwgc2V0LlxuICAgKiBTZXR0aW5nIHRoaXMgdG8gMCBjYXVzZXMgbm8gbGFiZWwgc2V0IGxpbWl0IHRvIGJlIGVuZm9yY2VkLCBidXQgaXQgZG9lcyBjYXVzZSBBbWF6b24gTWFuYWdlZFxuICAgKiBTZXJ2aWNlIGZvciBQcm9tZXRoZXVzIHRvIHZlbmQgbGFiZWwgc2V0IG1ldHJpY3MgdG8gQ2xvdWRXYXRjaCBMb2dzLlxuICAgKlxuICAgKiBNaW5pbXVtIDBcbiAgICovXG4gIHJlYWRvbmx5IG1heFNlcmllcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIGxhYmVsIGlzIGEgbmFtZTp2YWx1ZSBwYWlyIHVzZWQgdG8gYWRkIGNvbnRleHQgdG8gaW5nZXN0ZWQgbWV0cmljcy4gVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGVcbiAqIG5hbWUgYW5kIHZhbHVlIGZvciBvbmUgbGFiZWwgdGhhdCBpcyB1c2VkIGluIGEgbGFiZWwgc2V0LiBZb3UgY2FuIHNldCBpbmdlc3Rpb24gbGltaXRzIG9uIHRpbWVcbiAqIHNlcmllcyB0aGF0IG1hdGNoIGRlZmluZWQgbGFiZWwgc2V0cywgdG8gaGVscCBwcmV2ZW50IGEgd29ya3NwYWNlIGZyb20gYmVpbmcgb3ZlcndoZWxtZWQgd2l0aFxuICogdW5leHBlY3RlZCBzcGlrZXMgaW4gdGltZSBzZXJpZXMgaW5nZXN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhYmVsIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIGZvciB0aGlzIGxhYmVsLlxuICAgKlxuICAgKiBQYXR0ZXJuOiBeW2EtekEtWl9dW2EtekEtWjAtOV9dKiRcbiAgICpcbiAgICogQXQgbGVhc3Qgb25lIGNoYXJhY3Rlci5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBmb3IgdGhpcyBsYWJlbC5cbiAgICpcbiAgICogQXQgbGVhc3Qgb25lIGNoYXJhY3Rlci5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhpcyBkZWZpbmVzIGEgbGFiZWwgc2V0IGZvciB0aGUgd29ya3NwYWNlLCBhbmQgZGVmaW5lcyB0aGUgaW5nZXN0aW9uIGxpbWl0IGZvciBhY3RpdmUgdGltZVxuICogc2VyaWVzIHRoYXQgbWF0Y2ggdGhhdCBsYWJlbCBzZXQuIEVhY2ggbGFiZWwgbmFtZSBpbiBhIGxhYmVsIHNldCBtdXN0IGJlIHVuaXF1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW1pdHNQZXJMYWJlbFNldCB7XG4gIC8qKlxuICAgKiBUaGlzIGRlZmluZXMgb25lIGxhYmVsIHNldCB0aGF0IHdpbGwgaGF2ZSBhbiBlbmZvcmNlZCBpbmdlc3Rpb24gbGltaXQuIFlvdSBjYW4gc2V0IGluZ2VzdGlvblxuICAgKiBsaW1pdHMgb24gdGltZSBzZXJpZXMgdGhhdCBtYXRjaCBkZWZpbmVkIGxhYmVsIHNldHMsIHRvIGhlbHAgcHJldmVudCBhIHdvcmtzcGFjZSBmcm9tIGJlaW5nXG4gICAqIG92ZXJ3aGVsbWVkIHdpdGggdW5leHBlY3RlZCBzcGlrZXMgaW4gdGltZSBzZXJpZXMgaW5nZXN0aW9uLlxuICAgKlxuICAgKiBMYWJlbCB2YWx1ZXMgYWNjZXB0IGFsbCBVVEYtOCBjaGFyYWN0ZXJzIHdpdGggb25lIGV4Y2VwdGlvbi4gSWYgdGhlIGxhYmVsIG5hbWUgaXMgbWV0cmljXG4gICAqIG5hbWUgbGFiZWwgX19uYW1lX18sIHRoZW4gdGhlIG1ldHJpYyBwYXJ0IG9mIHRoZSBuYW1lIG11c3QgY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIHBhdHRlcm46XG4gICAqIFthLXpBLVpfOl1bYS16QS1aMC05XzpdKlxuICAgKlxuICAgKiBNaW5pbXVtIDBcbiAgICovXG4gIHJlYWRvbmx5IGxhYmVsU2V0OiBMYWJlbFtdO1xuXG4gIC8qKlxuICAgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbWl0cyB0aGF0IGFwcGx5IHRvIHRpbWUgc2VyaWVzIHRoYXRcbiAgICogbWF0Y2ggdGhpcyBsYWJlbCBzZXQuXG4gICAqL1xuICByZWFkb25seSBsaW1pdHM6IExpbWl0c1BlckxhYmVsU2V0RW50cnk7XG59XG5cbi8qKlxuICogVXNlIHRoaXMgc3RydWN0dXJlIHRvIGRlZmluZSBsYWJlbCBzZXRzIGFuZCB0aGUgaW5nZXN0aW9uIGxpbWl0cyBmb3IgdGltZSBzZXJpZXMgdGhhdCBtYXRjaFxuICogbGFiZWwgc2V0cywgYW5kIHRvIHNwZWNpZnkgdGhlIHJldGVudGlvbiBwZXJpb2Qgb2YgdGhlIHdvcmtzcGFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoaXMgaXMgYW4gYXJyYXkgb2Ygc3RydWN0dXJlcywgd2hlcmUgZWFjaCBzdHJ1Y3R1cmUgZGVmaW5lcyBhIGxhYmVsIHNldCBmb3IgdGhlIHdvcmtzcGFjZSxcbiAgICogYW5kIGRlZmluZXMgdGhlIGluZ2VzdGlvbiBsaW1pdCBmb3IgYWN0aXZlIHRpbWUgc2VyaWVzIGZvciBlYWNoIG9mIHRob3NlIGxhYmVsIHNldHMuIEVhY2hcbiAgICogbGFiZWwgbmFtZSBpbiBhIGxhYmVsIHNldCBtdXN0IGJlIHVuaXF1ZS5cbiAgICpcbiAgICogTWluaW11bSAwXG4gICAqL1xuICByZWFkb25seSBsaW1pdHNQZXJMYWJlbFNldHM/OiBMaW1pdHNQZXJMYWJlbFNldFtdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IG1hbnkgZGF5cyB0aGF0IG1ldHJpY3Mgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgd29ya3NwYWNlLlxuICAgKlxuICAgKiBNaW5pbXVtIDFcbiAgICovXG4gIHJlYWRvbmx5IHJldGVudGlvblBlcmlvZEluRGF5cz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJV29ya3NwYWNlIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBhbGVydCBtYW5hZ2VyIGRlZmluaXRpb24sIGEgWUFNTCBjb25maWd1cmF0aW9uIGZvciB0aGUgYWxlcnQgbWFuYWdlciBpbiB5b3VyIEFtYXpvblxuICAgKiBNYW5hZ2VkIFNlcnZpY2UgZm9yIFByb21ldGhldXMgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxlcnRNYW5hZ2VyRGVmaW5pdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFsaWFzIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhpcyB3b3Jrc3BhY2UgdG8gaGVscCBpZGVudGlmeSBpdC4gSXQgZG9lcyBub3QgbmVlZCB0byBiZVxuICAgKiB1bmlxdWUuXG4gICAqL1xuICByZWFkb25seSBhbGlhcz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1c3RvbWVyIG1hbmFnZWQgQVdTIEtNUyBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW5nIGRhdGEgd2l0aGluIHlvdXIgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5PzogSUtleTtcblxuICAvKipcbiAgICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcnVsZXMgYW5kIGFsZXJ0aW5nIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmb3IgdGhlXG4gICAqIHdvcmtzcGFjZS5cbiAgICpcbiAgICogTm90ZTogVGhlc2UgbG9nZ2luZyBjb25maWd1cmF0aW9ucyBhcmUgb25seSBmb3IgcnVsZXMgYW5kIGFsZXJ0aW5nIGxvZ3MuXG4gICAqL1xuICByZWFkb25seSBsb2dnaW5nQ29uZmlndXJhdGlvbj86IExvZ2dpbmdDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmaW5pdGlvbiBvZiBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gaW4gYW4gQW1hem9uIE1hbmFnZWQgU2VydmljZSBmb3IgUHJvbWV0aGV1cyB3b3Jrc3BhY2UuXG4gICAqL1xuICByZWFkb25seSBxdWVyeUxvZ2dpbmdDb25maWd1cmF0aW9uPzogUXVlcnlMb2dnaW5nQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVXNlIHRoaXMgc3RydWN0dXJlIHRvIGRlZmluZSBsYWJlbCBzZXRzIGFuZCB0aGUgaW5nZXN0aW9uIGxpbWl0cyBmb3IgdGltZSBzZXJpZXMgdGhhdCBtYXRjaFxuICAgKiBsYWJlbCBzZXRzLCBhbmQgdG8gc3BlY2lmeSB0aGUgcmV0ZW50aW9uIHBlcmlvZCBvZiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya3NwYWNlQ29uZmlndXJhdGlvbj86IFdvcmtzcGFjZUNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtzcGFjZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHdvcmtzcGFjZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgd29ya3NwYWNlQXJuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBXb3Jrc3BhY2VCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJV29ya3NwYWNlIHtcbiAgLyoqXG4gICAqIFRoZSBhbGVydCBtYW5hZ2VyIGRlZmluaXRpb24sIGEgWUFNTCBjb25maWd1cmF0aW9uIGZvciB0aGUgYWxlcnQgbWFuYWdlciBpbiB5b3VyIEFtYXpvblxuICAgKiBNYW5hZ2VkIFNlcnZpY2UgZm9yIFByb21ldGhldXMgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGFsZXJ0TWFuYWdlckRlZmluaXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhbGlhcyB0aGF0IGlzIGFzc2lnbmVkIHRvIHRoaXMgd29ya3NwYWNlIHRvIGhlbHAgaWRlbnRpZnkgaXQuIEl0IGRvZXMgbm90IG5lZWQgdG8gYmVcbiAgICogdW5pcXVlLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tZXIgbWFuYWdlZCBBV1MgS01TIGtleSB0byB1c2UgZm9yIGVuY3J5cHRpbmcgZGF0YSB3aXRoaW4geW91ciB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkga21zS2V5PzogSUtleTtcblxuICAvKipcbiAgICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcnVsZXMgYW5kIGFsZXJ0aW5nIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmb3IgdGhlXG4gICAqIHdvcmtzcGFjZS5cbiAgICpcbiAgICogTm90ZTogVGhlc2UgbG9nZ2luZyBjb25maWd1cmF0aW9ucyBhcmUgb25seSBmb3IgcnVsZXMgYW5kIGFsZXJ0aW5nIGxvZ3MuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbG9nZ2luZ0NvbmZpZ3VyYXRpb24/OiBMb2dnaW5nQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGRlZmluaXRpb24gb2YgbG9nZ2luZyBjb25maWd1cmF0aW9uIGluIGFuIEFtYXpvbiBNYW5hZ2VkIFNlcnZpY2UgZm9yIFByb21ldGhldXMgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHF1ZXJ5TG9nZ2luZ0NvbmZpZ3VyYXRpb24/OiBRdWVyeUxvZ2dpbmdDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyBzdHJ1Y3R1cmUgdG8gZGVmaW5lIGxhYmVsIHNldHMgYW5kIHRoZSBpbmdlc3Rpb24gbGltaXRzIGZvciB0aW1lIHNlcmllcyB0aGF0IG1hdGNoXG4gICAqIGxhYmVsIHNldHMsIGFuZCB0byBzcGVjaWZ5IHRoZSByZXRlbnRpb24gcGVyaW9kIG9mIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgd29ya3NwYWNlQ29uZmlndXJhdGlvbj86IFdvcmtzcGFjZUNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgZm9yIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgd29ya3NwYWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgd29ya3NwYWNlLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHdvcmtzcGFjZUFybjogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBnZXRXb3Jrc3BhY2VJZCh3b3Jrc3BhY2VBcm46IHN0cmluZykge1xuICAgIHJldHVybiB3b3Jrc3BhY2VBcm4uc3Vic3RyaW5nKHdvcmtzcGFjZUFybi5sYXN0SW5kZXhPZignLycpICsgMSk7XG4gIH1cbn0iXX0=
|