@rio-cloud/cdk-v2-constructs 2.4.0 → 2.5.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 +107 -1
- package/CHANGELOG.md +12 -0
- package/lib/contributions/team-claid/datadog/index.d.ts +1 -0
- package/lib/contributions/team-claid/datadog/index.js +2 -1
- package/lib/contributions/team-claid/datadog/usage-monitoring.d.ts +12 -0
- package/lib/contributions/team-claid/datadog/usage-monitoring.js +133 -0
- package/lib/datadog/datadogLogIndexMonitoring.js +15 -4
- package/package.json +1 -1
- package/version.json +1 -1
package/.jsii
CHANGED
|
@@ -6380,6 +6380,112 @@
|
|
|
6380
6380
|
"name": "UnitOfPeriod",
|
|
6381
6381
|
"symbolId": "src/watchful/datadog-log-alarm:UnitOfPeriod"
|
|
6382
6382
|
},
|
|
6383
|
+
"@rio-cloud/cdk-v2-constructs.UsageMonitoring": {
|
|
6384
|
+
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
6385
|
+
"base": "constructs.Construct",
|
|
6386
|
+
"docs": {
|
|
6387
|
+
"stability": "stable"
|
|
6388
|
+
},
|
|
6389
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.UsageMonitoring",
|
|
6390
|
+
"initializer": {
|
|
6391
|
+
"docs": {
|
|
6392
|
+
"stability": "stable"
|
|
6393
|
+
},
|
|
6394
|
+
"locationInModule": {
|
|
6395
|
+
"filename": "src/contributions/team-claid/datadog/usage-monitoring.ts",
|
|
6396
|
+
"line": 30
|
|
6397
|
+
},
|
|
6398
|
+
"parameters": [
|
|
6399
|
+
{
|
|
6400
|
+
"name": "scope",
|
|
6401
|
+
"type": {
|
|
6402
|
+
"fqn": "constructs.Construct"
|
|
6403
|
+
}
|
|
6404
|
+
},
|
|
6405
|
+
{
|
|
6406
|
+
"name": "id",
|
|
6407
|
+
"type": {
|
|
6408
|
+
"primitive": "string"
|
|
6409
|
+
}
|
|
6410
|
+
},
|
|
6411
|
+
{
|
|
6412
|
+
"name": "props",
|
|
6413
|
+
"type": {
|
|
6414
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.UsageMonitoringProps"
|
|
6415
|
+
}
|
|
6416
|
+
}
|
|
6417
|
+
]
|
|
6418
|
+
},
|
|
6419
|
+
"kind": "class",
|
|
6420
|
+
"locationInModule": {
|
|
6421
|
+
"filename": "src/contributions/team-claid/datadog/usage-monitoring.ts",
|
|
6422
|
+
"line": 29
|
|
6423
|
+
},
|
|
6424
|
+
"name": "UsageMonitoring",
|
|
6425
|
+
"symbolId": "src/contributions/team-claid/datadog/usage-monitoring:UsageMonitoring"
|
|
6426
|
+
},
|
|
6427
|
+
"@rio-cloud/cdk-v2-constructs.UsageMonitoringProps": {
|
|
6428
|
+
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
6429
|
+
"datatype": true,
|
|
6430
|
+
"docs": {
|
|
6431
|
+
"stability": "stable"
|
|
6432
|
+
},
|
|
6433
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.UsageMonitoringProps",
|
|
6434
|
+
"kind": "interface",
|
|
6435
|
+
"locationInModule": {
|
|
6436
|
+
"filename": "src/contributions/team-claid/datadog/usage-monitoring.ts",
|
|
6437
|
+
"line": 17
|
|
6438
|
+
},
|
|
6439
|
+
"name": "UsageMonitoringProps",
|
|
6440
|
+
"properties": [
|
|
6441
|
+
{
|
|
6442
|
+
"abstract": true,
|
|
6443
|
+
"docs": {
|
|
6444
|
+
"stability": "stable"
|
|
6445
|
+
},
|
|
6446
|
+
"immutable": true,
|
|
6447
|
+
"locationInModule": {
|
|
6448
|
+
"filename": "src/contributions/team-claid/datadog/usage-monitoring.ts",
|
|
6449
|
+
"line": 19
|
|
6450
|
+
},
|
|
6451
|
+
"name": "alertType",
|
|
6452
|
+
"type": {
|
|
6453
|
+
"primitive": "string"
|
|
6454
|
+
}
|
|
6455
|
+
},
|
|
6456
|
+
{
|
|
6457
|
+
"abstract": true,
|
|
6458
|
+
"docs": {
|
|
6459
|
+
"stability": "stable"
|
|
6460
|
+
},
|
|
6461
|
+
"immutable": true,
|
|
6462
|
+
"locationInModule": {
|
|
6463
|
+
"filename": "src/contributions/team-claid/datadog/usage-monitoring.ts",
|
|
6464
|
+
"line": 20
|
|
6465
|
+
},
|
|
6466
|
+
"name": "organization",
|
|
6467
|
+
"type": {
|
|
6468
|
+
"primitive": "string"
|
|
6469
|
+
}
|
|
6470
|
+
},
|
|
6471
|
+
{
|
|
6472
|
+
"abstract": true,
|
|
6473
|
+
"docs": {
|
|
6474
|
+
"stability": "stable"
|
|
6475
|
+
},
|
|
6476
|
+
"immutable": true,
|
|
6477
|
+
"locationInModule": {
|
|
6478
|
+
"filename": "src/contributions/team-claid/datadog/usage-monitoring.ts",
|
|
6479
|
+
"line": 18
|
|
6480
|
+
},
|
|
6481
|
+
"name": "serviceName",
|
|
6482
|
+
"type": {
|
|
6483
|
+
"primitive": "string"
|
|
6484
|
+
}
|
|
6485
|
+
}
|
|
6486
|
+
],
|
|
6487
|
+
"symbolId": "src/contributions/team-claid/datadog/usage-monitoring:UsageMonitoringProps"
|
|
6488
|
+
},
|
|
6383
6489
|
"@rio-cloud/cdk-v2-constructs.WatchApplicationLoadBalancer": {
|
|
6384
6490
|
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
6385
6491
|
"base": "constructs.Construct",
|
|
@@ -8255,5 +8361,5 @@
|
|
|
8255
8361
|
}
|
|
8256
8362
|
},
|
|
8257
8363
|
"version": "0.0.0",
|
|
8258
|
-
"fingerprint": "
|
|
8364
|
+
"fingerprint": "dte+8vB0DqG7X/HrsuaP7sCljQ0lY8wacZCfjzyVKZg="
|
|
8259
8365
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [2.5.0](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.4.2&sourceBranch=refs%2Ftags%2Fv2.5.0) (2022-07-28)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **contributions:** Add support for Datadog usage monitoring ([d9e9375](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/d9e9375b299ad3d12ad8cb2361c54402c5a877b1))
|
|
11
|
+
* **contributions:** Add support for Datadog usage monitoring ([6b729a7](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/6b729a77e63ec10fd4b3bd792d1008751e3d120b))
|
|
12
|
+
|
|
13
|
+
### [2.4.2](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.4.1&sourceBranch=refs%2Ftags%2Fv2.4.2) (2022-07-20)
|
|
14
|
+
|
|
15
|
+
### [2.4.1](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.4.0&sourceBranch=refs%2Ftags%2Fv2.4.1) (2022-07-20)
|
|
16
|
+
|
|
5
17
|
## [2.4.0](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.3.3&sourceBranch=refs%2Ftags%2Fv2.4.0) (2022-07-14)
|
|
6
18
|
|
|
7
19
|
|
|
@@ -11,4 +11,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
__exportStar(require("./backup-monitor"), exports);
|
|
14
|
-
|
|
14
|
+
__exportStar(require("./usage-monitoring"), exports);
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLWNsYWlkL2RhdGFkb2cvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWlDO0FBQ2pDLHFEQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYmFja3VwLW1vbml0b3InO1xuZXhwb3J0ICogZnJvbSAnLi91c2FnZS1tb25pdG9yaW5nJztcbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as constructs from 'constructs';
|
|
2
|
+
import { DatadogAlertType } from '../../../datadog/datadogMonitor';
|
|
3
|
+
export declare type DatadogOrganization = 'EU' | 'LATAM' | 'Landing Zone';
|
|
4
|
+
export interface UsageMonitoringProps {
|
|
5
|
+
readonly serviceName: string;
|
|
6
|
+
readonly alertType: DatadogAlertType;
|
|
7
|
+
readonly organization: DatadogOrganization;
|
|
8
|
+
}
|
|
9
|
+
export declare class UsageMonitoring extends constructs.Construct {
|
|
10
|
+
constructor(scope: constructs.Construct, id: string, props: UsageMonitoringProps);
|
|
11
|
+
private createAnomalyMonitorForSpikes;
|
|
12
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.UsageMonitoring = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const constructs = require("constructs");
|
|
7
|
+
const datadogMonitor_1 = require("../../../datadog/datadogMonitor");
|
|
8
|
+
function getOrganizationUrlPrefix(organization) {
|
|
9
|
+
switch (organization) {
|
|
10
|
+
case 'EU':
|
|
11
|
+
return 'app';
|
|
12
|
+
case 'LATAM':
|
|
13
|
+
return 'rio-brazil';
|
|
14
|
+
case 'Landing Zone':
|
|
15
|
+
return 'rio-landingzone';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
class UsageMonitoring extends constructs.Construct {
|
|
19
|
+
constructor(scope, id, props) {
|
|
20
|
+
super(scope, id);
|
|
21
|
+
const additionalMessageForLogIndexScopedMonitors = `Take a look at https://${getOrganizationUrlPrefix(props.organization)}.datadoghq.eu/dash/integration/465/log-management-estimated-usage?tpl_var_datadog_index={{datadog_index.name}} for more details.`;
|
|
22
|
+
const additionalMessageForEnvScopedMonitors = `Take a look at https://${getOrganizationUrlPrefix(props.organization)}.datadoghq.eu/dash/integration/489/apm-traces-estimated-usage?tpl_var_env={{env.name}} for more details.`;
|
|
23
|
+
const infrastructureUsageSpikeMonitors = [
|
|
24
|
+
{
|
|
25
|
+
humanReadableName: 'infrastructure hosts',
|
|
26
|
+
query: 'sum:datadog.estimated_usage.hosts{*}',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
humanReadableName: "infrastructure hosts for '{{child_org_name.name}}'",
|
|
30
|
+
query: 'sum:datadog.estimated_usage.hosts{*} by {child_org_name}',
|
|
31
|
+
},
|
|
32
|
+
{ humanReadableName: 'Fargate tasks', query: 'sum:datadog.apm.fargate_task_instance{*}' },
|
|
33
|
+
{ humanReadableName: 'profiled Fargate tasks', query: 'sum:datadog.profiling.fargate{*}' },
|
|
34
|
+
{
|
|
35
|
+
humanReadableName: 'custom metrics',
|
|
36
|
+
query: 'sum:datadog.estimated_usage.metrics.custom{*}',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
humanReadableName: "custom metrics for '{{child_org_name.name}}'",
|
|
40
|
+
query: 'sum:datadog.estimated_usage.metrics.custom{*} by {child_org_name}',
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
const logManagementUsageSpikeMonitors = [
|
|
44
|
+
{
|
|
45
|
+
humanReadableName: 'log ingestion',
|
|
46
|
+
query: 'sum:datadog.estimated_usage.logs.ingested_bytes{*}.as_count()',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
humanReadableName: "log ingestion for '{{datadog_index.name}}'",
|
|
50
|
+
query: 'sum:datadog.estimated_usage.logs.ingested_bytes{*} by {datadog_index}.as_count()',
|
|
51
|
+
additionalMessage: additionalMessageForLogIndexScopedMonitors,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
humanReadableName: 'log indexing',
|
|
55
|
+
query: 'sum:datadog.estimated_usage.logs.ingested_events{datadog_is_excluded:false}.as_count()',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
humanReadableName: "log indexing for '{{datadog_index.name}}'",
|
|
59
|
+
query: 'sum:datadog.estimated_usage.logs.ingested_events{datadog_is_excluded:false} by {datadog_index}.as_count()',
|
|
60
|
+
additionalMessage: additionalMessageForLogIndexScopedMonitors,
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
const apmUsageSpikeMonitors = [
|
|
64
|
+
{ humanReadableName: 'APM hosts', query: 'sum:datadog.estimated_usage.apm_hosts{*}' },
|
|
65
|
+
{
|
|
66
|
+
humanReadableName: "APM hosts for '{{child_org_name.name}}'",
|
|
67
|
+
query: 'sum:datadog.estimated_usage.apm_hosts{*} by {child_org_name}',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
humanReadableName: 'span ingestion',
|
|
71
|
+
query: 'sum:datadog.estimated_usage.apm.ingested_bytes{*}.as_count()',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
humanReadableName: "span ingestion for '{{env.name}}'",
|
|
75
|
+
query: 'sum:datadog.estimated_usage.apm.ingested_bytes{*} by {env}.as_count()',
|
|
76
|
+
additionalMessage: additionalMessageForEnvScopedMonitors,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
humanReadableName: 'span indexing',
|
|
80
|
+
query: 'sum:datadog.estimated_usage.apm.indexed_spans{*}.as_count()',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
humanReadableName: "span indexing for '{{env.name}}'",
|
|
84
|
+
query: 'sum:datadog.estimated_usage.apm.indexed_spans{*} by {env}.as_count()',
|
|
85
|
+
additionalMessage: additionalMessageForEnvScopedMonitors,
|
|
86
|
+
},
|
|
87
|
+
];
|
|
88
|
+
const syntheticUsageSpikeMonitors = [
|
|
89
|
+
{
|
|
90
|
+
humanReadableName: 'Synthetic API tests',
|
|
91
|
+
query: 'sum:datadog.estimated_usage.synthetics.api_test_runs{*}.as_count()',
|
|
92
|
+
},
|
|
93
|
+
];
|
|
94
|
+
const serverlessUsageSpikeMonitors = [
|
|
95
|
+
{
|
|
96
|
+
humanReadableName: 'serverless functions',
|
|
97
|
+
query: 'sum:datadog.estimated_usage.serverless.aws_lambda_functions{*}',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
humanReadableName: "serverless functions for '{{child_org_name.name}}'",
|
|
101
|
+
query: 'sum:datadog.estimated_usage.serverless.aws_lambda_functions{*} by {child_org_name}',
|
|
102
|
+
},
|
|
103
|
+
];
|
|
104
|
+
for (const usageSpikeMonitor of [].concat(infrastructureUsageSpikeMonitors, logManagementUsageSpikeMonitors, apmUsageSpikeMonitors, serverlessUsageSpikeMonitors, syntheticUsageSpikeMonitors)) {
|
|
105
|
+
this.createAnomalyMonitorForSpikes(props.serviceName, props.alertType, usageSpikeMonitor);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
createAnomalyMonitorForSpikes(serviceName, alertType, usageSpikeMonitor) {
|
|
109
|
+
var _b;
|
|
110
|
+
return new datadogMonitor_1.DatadogMonitor(this, usageSpikeMonitor.humanReadableName, {
|
|
111
|
+
serviceName,
|
|
112
|
+
alertTypes: [alertType],
|
|
113
|
+
monitor: {
|
|
114
|
+
name: `${usageSpikeMonitor.humanReadableName} spike`,
|
|
115
|
+
type: 'query alert',
|
|
116
|
+
query: `avg(last_4h):anomalies(${usageSpikeMonitor.query}, \'agile\', 2, direction=\'above\', interval=60, alert_window=\'last_15m\', seasonality=\'weekly\', timezone=\'Europe/Berlin\', count_default_zero=\'true\') >= 1`,
|
|
117
|
+
message: `${usageSpikeMonitor.humanReadableName} are getting out-of-control. ${(_b = usageSpikeMonitor.additionalMessage) !== null && _b !== void 0 ? _b : ''}`,
|
|
118
|
+
options: {
|
|
119
|
+
include_tags: false,
|
|
120
|
+
notify_no_data: true,
|
|
121
|
+
threshold_windows: {
|
|
122
|
+
trigger_window: 'last_15m',
|
|
123
|
+
recovery_window: 'last_15m',
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.UsageMonitoring = UsageMonitoring;
|
|
131
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
132
|
+
UsageMonitoring[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.UsageMonitoring", version: "0.0.0" };
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNhZ2UtbW9uaXRvcmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tY2xhaWQvZGF0YWRvZy91c2FnZS1tb25pdG9yaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUNBQXlDO0FBQ3pDLG9FQUFtRjtBQUluRixTQUFTLHdCQUF3QixDQUFDLFlBQWlDO0lBQ2pFLFFBQVEsWUFBWSxFQUFFO1FBQ3BCLEtBQUssSUFBSTtZQUNQLE9BQU8sS0FBSyxDQUFDO1FBQ2YsS0FBSyxPQUFPO1lBQ1YsT0FBTyxZQUFZLENBQUM7UUFDdEIsS0FBSyxjQUFjO1lBQ2pCLE9BQU8saUJBQWlCLENBQUM7S0FDNUI7QUFDSCxDQUFDO0FBY0QsTUFBYSxlQUFnQixTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBQ3ZELFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBMkI7UUFDOUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLDBDQUEwQyxHQUFHLDBCQUEwQix3QkFBd0IsQ0FDbkcsS0FBSyxDQUFDLFlBQVksQ0FDbkIsa0lBQWtJLENBQUM7UUFDcEksTUFBTSxxQ0FBcUMsR0FBRywwQkFBMEIsd0JBQXdCLENBQzlGLEtBQUssQ0FBQyxZQUFZLENBQ25CLDBHQUEwRyxDQUFDO1FBRTVHLE1BQU0sZ0NBQWdDLEdBQXdCO1lBQzVEO2dCQUNFLGlCQUFpQixFQUFFLHNCQUFzQjtnQkFDekMsS0FBSyxFQUFFLHNDQUFzQzthQUM5QztZQUNEO2dCQUNFLGlCQUFpQixFQUFFLG9EQUFvRDtnQkFDdkUsS0FBSyxFQUFFLDBEQUEwRDthQUNsRTtZQUNELEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSwwQ0FBMEMsRUFBRTtZQUN6RixFQUFFLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxrQ0FBa0MsRUFBRTtZQUMxRjtn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RTt3QkFDakIsY0FBYyxFQUFFLFVBQVU7d0JBQzFCLGVBQWUsRUFBRSxVQUFVO3FCQUM1QjtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUF0SUgsMENBdUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IERhdGFkb2dBbGVydFR5cGUsIERhdGFkb2dNb25pdG9yIH0gZnJvbSAnLi4vLi4vLi4vZGF0YWRvZy9kYXRhZG9nTW9uaXRvcic7XG5cbmV4cG9ydCB0eXBlIERhdGFkb2dPcmdhbml6YXRpb24gPSAnRVUnIHwgJ0xBVEFNJyB8ICdMYW5kaW5nIFpvbmUnO1xuXG5mdW5jdGlvbiBnZXRPcmdhbml6YXRpb25VcmxQcmVmaXgob3JnYW5pemF0aW9uOiBEYXRhZG9nT3JnYW5pemF0aW9uKTogc3RyaW5nIHtcbiAgc3dpdGNoIChvcmdhbml6YXRpb24pIHtcbiAgICBjYXNlICdFVSc6XG4gICAgICByZXR1cm4gJ2FwcCc7XG4gICAgY2FzZSAnTEFUQU0nOlxuICAgICAgcmV0dXJuICdyaW8tYnJhemlsJztcbiAgICBjYXNlICdMYW5kaW5nIFpvbmUnOlxuICAgICAgcmV0dXJuICdyaW8tbGFuZGluZ3pvbmUnO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNhZ2VNb25pdG9yaW5nUHJvcHMge1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBhbGVydFR5cGU6IERhdGFkb2dBbGVydFR5cGU7XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogRGF0YWRvZ09yZ2FuaXphdGlvbjtcbn1cblxuaW50ZXJmYWNlIFVzYWdlU3Bpa2VNb25pdG9yIHtcbiAgaHVtYW5SZWFkYWJsZU5hbWU6IHN0cmluZztcbiAgcXVlcnk6IHN0cmluZztcbiAgYWRkaXRpb25hbE1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBVc2FnZU1vbml0b3JpbmcgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFVzYWdlTW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGFkZGl0aW9uYWxNZXNzYWdlRm9yTG9nSW5kZXhTY29wZWRNb25pdG9ycyA9IGBUYWtlIGEgbG9vayBhdCBodHRwczovLyR7Z2V0T3JnYW5pemF0aW9uVXJsUHJlZml4KFxuICAgICAgcHJvcHMub3JnYW5pemF0aW9uLFxuICAgICl9LmRhdGFkb2docS5ldS9kYXNoL2ludGVncmF0aW9uLzQ2NS9sb2ctbWFuYWdlbWVudC1lc3RpbWF0ZWQtdXNhZ2U/dHBsX3Zhcl9kYXRhZG9nX2luZGV4PXt7ZGF0YWRvZ19pbmRleC5uYW1lfX0gZm9yIG1vcmUgZGV0YWlscy5gO1xuICAgIGNvbnN0IGFkZGl0aW9uYWxNZXNzYWdlRm9yRW52U2NvcGVkTW9uaXRvcnMgPSBgVGFrZSBhIGxvb2sgYXQgaHR0cHM6Ly8ke2dldE9yZ2FuaXphdGlvblVybFByZWZpeChcbiAgICAgIHByb3BzLm9yZ2FuaXphdGlvbixcbiAgICApfS5kYXRhZG9naHEuZXUvZGFzaC9pbnRlZ3JhdGlvbi80ODkvYXBtLXRyYWNlcy1lc3RpbWF0ZWQtdXNhZ2U/dHBsX3Zhcl9lbnY9e3tlbnYubmFtZX19IGZvciBtb3JlIGRldGFpbHMuYDtcblxuICAgIGNvbnN0IGluZnJhc3RydWN0dXJlVXNhZ2VTcGlrZU1vbml0b3JzOiBVc2FnZVNwaWtlTW9uaXRvcltdID0gW1xuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogJ2luZnJhc3RydWN0dXJlIGhvc3RzJyxcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UuaG9zdHN7Kn0nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHVtYW5SZWFkYWJsZU5hbWU6IFwiaW5mcmFzdHJ1Y3R1cmUgaG9zdHMgZm9yICd7e2NoaWxkX29yZ19uYW1lLm5hbWV9fSdcIixcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UuaG9zdHN7Kn0gYnkge2NoaWxkX29yZ19uYW1lfScsXG4gICAgICB9LFxuICAgICAgeyBodW1hblJlYWRhYmxlTmFtZTogJ0ZhcmdhdGUgdGFza3MnLCBxdWVyeTogJ3N1bTpkYXRhZG9nLmFwbS5mYXJnYXRlX3Rhc2tfaW5zdGFuY2V7Kn0nIH0sXG4gICAgICB7IGh1bWFuUmVhZGFibGVOYW1lOiAncHJvZmlsZWQgRmFyZ2F0ZSB0YXNrcycsIHF1ZXJ5OiAnc3VtOmRhdGFkb2cucHJvZmlsaW5nLmZhcmdhdGV7Kn0nIH0sXG4gICAgICB7XG4gICAgICAgIGh1bWFuUmVhZGFibGVOYW1lOiAnY3VzdG9tIG1ldHJpY3MnLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5tZXRyaWNzLmN1c3RvbXsqfScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogXCJjdXN0b20gbWV0cmljcyBmb3IgJ3t7Y2hpbGRfb3JnX25hbWUubmFtZX19J1wiLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5tZXRyaWNzLmN1c3RvbXsqfSBieSB7Y2hpbGRfb3JnX25hbWV9JyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IGxvZ01hbmFnZW1lbnRVc2FnZVNwaWtlTW9uaXRvcnM6IFVzYWdlU3Bpa2VNb25pdG9yW10gPSBbXG4gICAgICB7XG4gICAgICAgIGh1bWFuUmVhZGFibGVOYW1lOiAnbG9nIGluZ2VzdGlvbicsXG4gICAgICAgIHF1ZXJ5OiAnc3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLmxvZ3MuaW5nZXN0ZWRfYnl0ZXN7Kn0uYXNfY291bnQoKScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogXCJsb2cgaW5nZXN0aW9uIGZvciAne3tkYXRhZG9nX2luZGV4Lm5hbWV9fSdcIixcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UubG9ncy5pbmdlc3RlZF9ieXRlc3sqfSBieSB7ZGF0YWRvZ19pbmRleH0uYXNfY291bnQoKScsXG4gICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlOiBhZGRpdGlvbmFsTWVzc2FnZUZvckxvZ0luZGV4U2NvcGVkTW9uaXRvcnMsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogJ2xvZyBpbmRleGluZycsXG4gICAgICAgIHF1ZXJ5OiAnc3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLmxvZ3MuaW5nZXN0ZWRfZXZlbnRze2RhdGFkb2dfaXNfZXhjbHVkZWQ6ZmFsc2V9LmFzX2NvdW50KCknLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHVtYW5SZWFkYWJsZU5hbWU6IFwibG9nIGluZGV4aW5nIGZvciAne3tkYXRhZG9nX2luZGV4Lm5hbWV9fSdcIixcbiAgICAgICAgcXVlcnk6XG4gICAgICAgICAgJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5sb2dzLmluZ2VzdGVkX2V2ZW50c3tkYXRhZG9nX2lzX2V4Y2x1ZGVkOmZhbHNlfSBieSB7ZGF0YWRvZ19pbmRleH0uYXNfY291bnQoKScsXG4gICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlOiBhZGRpdGlvbmFsTWVzc2FnZUZvckxvZ0luZGV4U2NvcGVkTW9uaXRvcnMsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCBhcG1Vc2FnZVNwaWtlTW9uaXRvcnM6IFVzYWdlU3Bpa2VNb25pdG9yW10gPSBbXG4gICAgICB7IGh1bWFuUmVhZGFibGVOYW1lOiAnQVBNIGhvc3RzJywgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UuYXBtX2hvc3Rzeyp9JyB9LFxuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogXCJBUE0gaG9zdHMgZm9yICd7e2NoaWxkX29yZ19uYW1lLm5hbWV9fSdcIixcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UuYXBtX2hvc3Rzeyp9IGJ5IHtjaGlsZF9vcmdfbmFtZX0nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHVtYW5SZWFkYWJsZU5hbWU6ICdzcGFuIGluZ2VzdGlvbicsXG4gICAgICAgIHF1ZXJ5OiAnc3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLmFwbS5pbmdlc3RlZF9ieXRlc3sqfS5hc19jb3VudCgpJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGh1bWFuUmVhZGFibGVOYW1lOiBcInNwYW4gaW5nZXN0aW9uIGZvciAne3tlbnYubmFtZX19J1wiLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5hcG0uaW5nZXN0ZWRfYnl0ZXN7Kn0gYnkge2Vudn0uYXNfY291bnQoKScsXG4gICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlOiBhZGRpdGlvbmFsTWVzc2FnZUZvckVudlNjb3BlZE1vbml0b3JzLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHVtYW5SZWFkYWJsZU5hbWU6ICdzcGFuIGluZGV4aW5nJyxcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UuYXBtLmluZGV4ZWRfc3BhbnN7Kn0uYXNfY291bnQoKScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogXCJzcGFuIGluZGV4aW5nIGZvciAne3tlbnYubmFtZX19J1wiLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5hcG0uaW5kZXhlZF9zcGFuc3sqfSBieSB7ZW52fS5hc19jb3VudCgpJyxcbiAgICAgICAgYWRkaXRpb25hbE1lc3NhZ2U6IGFkZGl0aW9uYWxNZXNzYWdlRm9yRW52U2NvcGVkTW9uaXRvcnMsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCBzeW50aGV0aWNVc2FnZVNwaWtlTW9uaXRvcnM6IFVzYWdlU3Bpa2VNb25pdG9yW10gPSBbXG4gICAgICB7XG4gICAgICAgIGh1bWFuUmVhZGFibGVOYW1lOiAnU3ludGhldGljIEFQSSB0ZXN0cycsXG4gICAgICAgIHF1ZXJ5OiAnc3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLnN5bnRoZXRpY3MuYXBpX3Rlc3RfcnVuc3sqfS5hc19jb3VudCgpJyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IHNlcnZlcmxlc3NVc2FnZVNwaWtlTW9uaXRvcnM6IFVzYWdlU3Bpa2VNb25pdG9yW10gPSBbXG4gICAgICB7XG4gICAgICAgIGh1bWFuUmVhZGFibGVOYW1lOiAnc2VydmVybGVzcyBmdW5jdGlvbnMnLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5zZXJ2ZXJsZXNzLmF3c19sYW1iZGFfZnVuY3Rpb25zeyp9JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGh1bWFuUmVhZGFibGVOYW1lOiBcInNlcnZlcmxlc3MgZnVuY3Rpb25zIGZvciAne3tjaGlsZF9vcmdfbmFtZS5uYW1lfX0nXCIsXG4gICAgICAgIHF1ZXJ5OiAnc3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLnNlcnZlcmxlc3MuYXdzX2xhbWJkYV9mdW5jdGlvbnN7Kn0gYnkge2NoaWxkX29yZ19uYW1lfScsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IHVzYWdlU3Bpa2VNb25pdG9yIG9mIChbXSBhcyBVc2FnZVNwaWtlTW9uaXRvcltdKS5jb25jYXQoXG4gICAgICBpbmZyYXN0cnVjdHVyZVVzYWdlU3Bpa2VNb25pdG9ycyxcbiAgICAgIGxvZ01hbmFnZW1lbnRVc2FnZVNwaWtlTW9uaXRvcnMsXG4gICAgICBhcG1Vc2FnZVNwaWtlTW9uaXRvcnMsXG4gICAgICBzZXJ2ZXJsZXNzVXNhZ2VTcGlrZU1vbml0b3JzLFxuICAgICAgc3ludGhldGljVXNhZ2VTcGlrZU1vbml0b3JzLFxuICAgICkpIHtcbiAgICAgIHRoaXMuY3JlYXRlQW5vbWFseU1vbml0b3JGb3JTcGlrZXMocHJvcHMuc2VydmljZU5hbWUsIHByb3BzLmFsZXJ0VHlwZSwgdXNhZ2VTcGlrZU1vbml0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQW5vbWFseU1vbml0b3JGb3JTcGlrZXMoXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgICBhbGVydFR5cGU6IERhdGFkb2dBbGVydFR5cGUsXG4gICAgdXNhZ2VTcGlrZU1vbml0b3I6IFVzYWdlU3Bpa2VNb25pdG9yLFxuICApOiBEYXRhZG9nTW9uaXRvciB7XG4gICAgcmV0dXJuIG5ldyBEYXRhZG9nTW9uaXRvcih0aGlzLCB1c2FnZVNwaWtlTW9uaXRvci5odW1hblJlYWRhYmxlTmFtZSwge1xuICAgICAgc2VydmljZU5hbWUsXG4gICAgICBhbGVydFR5cGVzOiBbYWxlcnRUeXBlXSxcbiAgICAgIG1vbml0b3I6IHtcbiAgICAgICAgbmFtZTogYCR7dXNhZ2VTcGlrZU1vbml0b3IuaHVtYW5SZWFkYWJsZU5hbWV9IHNwaWtlYCxcbiAgICAgICAgdHlwZTogJ3F1ZXJ5IGFsZXJ0JyxcbiAgICAgICAgcXVlcnk6IGBhdmcobGFzdF80aCk6YW5vbWFsaWVzKCR7dXNhZ2VTcGlrZU1vbml0b3IucXVlcnl9LCBcXCdhZ2lsZVxcJywgMiwgZGlyZWN0aW9uPVxcJ2Fib3ZlXFwnLCBpbnRlcnZhbD02MCwgYWxlcnRfd2luZG93PVxcJ2xhc3RfMTVtXFwnLCBzZWFzb25hbGl0eT1cXCd3ZWVrbHlcXCcsIHRpbWV6b25lPVxcJ0V1cm9wZS9CZXJsaW5cXCcsIGNvdW50X2RlZmF1bHRfemVybz1cXCd0cnVlXFwnKSA+PSAxYCxcbiAgICAgICAgbWVzc2FnZTogYCR7dXNhZ2VTcGlrZU1vbml0b3IuaHVtYW5SZWFkYWJsZU5hbWV9IGFyZSBnZXR0aW5nIG91dC1vZi1jb250cm9sLiAke1xuICAgICAgICAgIHVzYWdlU3Bpa2VNb25pdG9yLmFkZGl0aW9uYWxNZXNzYWdlID8/ICcnXG4gICAgICAgIH1gLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgaW5jbHVkZV90YWdzOiBmYWxzZSxcbiAgICAgICAgICBub3RpZnlfbm9fZGF0YTogdHJ1ZSxcbiAgICAgICAgICB0aHJlc2hvbGRfd2luZG93czoge1xuICAgICAgICAgICAgdHJpZ2dlcl93aW5kb3c6ICdsYXN0XzE1bScsXG4gICAgICAgICAgICByZWNvdmVyeV93aW5kb3c6ICdsYXN0XzE1bScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -41,6 +41,8 @@ class DatadogLogIndexMonitoring extends constructs_1.Construct {
|
|
|
41
41
|
exports.DatadogLogIndexMonitoring = DatadogLogIndexMonitoring;
|
|
42
42
|
_a = JSII_RTTI_SYMBOL_1;
|
|
43
43
|
DatadogLogIndexMonitoring[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.DatadogLogIndexMonitoring", version: "0.0.0" };
|
|
44
|
+
const commonMonitorNamePrefix = (indexName) => `'${indexName}' index`;
|
|
45
|
+
const commonTags = (indexName) => [`logIndex:${indexName}`];
|
|
44
46
|
class DatadogLogDailyQuotaMonitor extends datadogMonitor_1.DatadogMonitor {
|
|
45
47
|
constructor(scope, id, props) {
|
|
46
48
|
const logQuotaInEvents = Math.floor(props.dailyLogQuota.valueInMillionEvents * 1000000);
|
|
@@ -50,7 +52,7 @@ class DatadogLogDailyQuotaMonitor extends datadogMonitor_1.DatadogMonitor {
|
|
|
50
52
|
serviceName: props.serviceName,
|
|
51
53
|
alertTypes: [props.alertType],
|
|
52
54
|
monitor: {
|
|
53
|
-
name:
|
|
55
|
+
name: `${commonMonitorNamePrefix(props.indexName)}: Log quota almost reached`,
|
|
54
56
|
type: 'metric alert',
|
|
55
57
|
query: `sum(last_1d):sum:datadog.estimated_usage.logs.ingested_events{datadog_is_excluded:false,datadog_index:${props.indexName}}.as_count() >= ${alertThreshold}`,
|
|
56
58
|
message: `[P3] Inspect your log volume at ${datadogLogsSearchWithIndexFilterDeepLink(props.indexName)} or adapt the log quota at ${datadogLogsIndexesConfigurationDeepLink}`,
|
|
@@ -63,6 +65,9 @@ class DatadogLogDailyQuotaMonitor extends datadogMonitor_1.DatadogMonitor {
|
|
|
63
65
|
notify_no_data: !props.sparseLogging,
|
|
64
66
|
no_data_timeframe: 24 * 60,
|
|
65
67
|
},
|
|
68
|
+
tags: [
|
|
69
|
+
...commonTags(props.indexName),
|
|
70
|
+
],
|
|
66
71
|
},
|
|
67
72
|
});
|
|
68
73
|
}
|
|
@@ -73,7 +78,7 @@ class DatadogLogsAnomalyMonitor extends datadogMonitor_1.DatadogMonitor {
|
|
|
73
78
|
serviceName: props.serviceName,
|
|
74
79
|
alertTypes: [props.alertType],
|
|
75
80
|
monitor: {
|
|
76
|
-
name:
|
|
81
|
+
name: `${commonMonitorNamePrefix(props.indexName)}: Log amount is rising to unexpected levels`,
|
|
77
82
|
type: 'metric alert',
|
|
78
83
|
query: `avg(last_4h):anomalies(sum:datadog.estimated_usage.logs.ingested_events{datadog_is_excluded:false,datadog_index:${props.indexName}}.as_count(), 'robust', 2, direction='above', alert_window='last_15m', interval=60, count_default_zero='true', seasonality='weekly', timezone='europe/berlin') >= 1`,
|
|
79
84
|
message: `[P4] Logs are getting out of control: ${datadogLogsSearchWithIndexFilterDeepLink(props.indexName)}`,
|
|
@@ -85,6 +90,9 @@ class DatadogLogsAnomalyMonitor extends datadogMonitor_1.DatadogMonitor {
|
|
|
85
90
|
recovery_window: 'last_15m',
|
|
86
91
|
},
|
|
87
92
|
},
|
|
93
|
+
tags: [
|
|
94
|
+
...commonTags(props.indexName),
|
|
95
|
+
],
|
|
88
96
|
},
|
|
89
97
|
});
|
|
90
98
|
}
|
|
@@ -95,7 +103,7 @@ class DatadogLogDailyQuotaReachedMonitor extends datadogMonitor_1.DatadogMonitor
|
|
|
95
103
|
serviceName: props.serviceName,
|
|
96
104
|
alertTypes: [props.alertType],
|
|
97
105
|
monitor: {
|
|
98
|
-
name:
|
|
106
|
+
name: `${commonMonitorNamePrefix(props.indexName)}: Log quota reached`,
|
|
99
107
|
type: 'event-v2 alert',
|
|
100
108
|
query: `events("source:datadog datadog_index:${props.indexName} Daily quota reached").rollup("count").last("5m") > 0`,
|
|
101
109
|
message: `[P2] The log quote for the index has been reached. If you do not increase the quota at ${datadogLogsIndexesConfigurationDeepLink}, no new logs will be indexed until the quota is reset at 2:00pm UTC.`,
|
|
@@ -105,6 +113,9 @@ class DatadogLogDailyQuotaReachedMonitor extends datadogMonitor_1.DatadogMonitor
|
|
|
105
113
|
critical: 0,
|
|
106
114
|
},
|
|
107
115
|
},
|
|
116
|
+
tags: [
|
|
117
|
+
...commonTags(props.indexName),
|
|
118
|
+
],
|
|
108
119
|
},
|
|
109
120
|
});
|
|
110
121
|
}
|
|
@@ -113,4 +124,4 @@ function datadogLogsSearchWithIndexFilterDeepLink(indexName) {
|
|
|
113
124
|
return `https://app.datadoghq.eu/logs?index=${indexName}`;
|
|
114
125
|
}
|
|
115
126
|
const datadogLogsIndexesConfigurationDeepLink = 'https://app.datadoghq.eu/logs/pipelines/indexes';
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhZG9nL2RhdGFkb2dMb2dJbmRleE1vbml0b3JpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBdUM7QUFDdkMscURBQW9FO0FBbURwRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLHlCQUEwQixTQUFRLHNCQUFTO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLDJCQUEyQixDQUFDLElBQUksRUFBRSw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLHlCQUF5QixDQUFDLElBQUksRUFBRSwrQkFBK0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLGtDQUFrQyxDQUFDLElBQUksRUFBRSxzQ0FBc0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU1RixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0QixRQUFRLEVBQUUsR0FBYSxFQUFFO2dCQUN2QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLEVBQUU7b0JBQzVHLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkVBQTJFLENBQUMsQ0FBQztpQkFDMUY7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsRUFBRTtvQkFDeEcsTUFBTSxDQUFDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO2lCQUN4RjtnQkFDRCxJQUFJLEtBQUssQ0FBQyxhQUFh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RUFBRSxtQkFBbUI7Z0JBQ3pCLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLEtBQUssRUFBRSx3Q0FBd0MsS0FBSyxDQUFDLFNBQVMsdURBQXVEO2dCQUNySCxPQUFPLEVBQUUsMEZBQTBGLHVDQUF1Qyx1RUFBdUU7Z0JBQ2pOLE9BQU8sRUFBRTtvQkFDUCxTQUFTLEVBQUUsRUFBRTtvQkFDYixVQUFVLEVBQUU7d0JBQ1YsUUFBUSxFQUFFLENBQUM7cUJBQ1o7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVELFNBQVMsd0NBQXdDLENBQUMsU0FBaUI7SUFDakUsT0FBTyx1Q0FBdUMsU0FBUyxFQUFFLENBQUM7QUFDNUQsQ0FBQztBQUVELE1BQU0sdUNBQXVDLEdBQUcsaURBQWlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IERhdGFkb2dNb25pdG9yLCBEYXRhZG9nQWxlcnRUeXBlIH0gZnJvbSAnLi9kYXRhZG9nTW9uaXRvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzIHtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgeW91ciBzZXJ2aWNlIGluIERhdGFkb2cuIENhbiBiZSB1c2VkIHRvIHF1ZXJ5IHRoZSBtb25pdG9ycy5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBEYXRhZG9nIGluZGV4LlxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlZ3JhdGlvbiB0byB1c2UgZm9yIGFsZXJ0aW5nLlxuICAgKiBGb3IgT3BzR2VuaWUsIHlvdSBuZWVkIHRvIGluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgJ29wc2dlbmllLWludGVncmF0aW9uJyBhY2NvdW50IG1vZHVsZS5cbiAgICovXG4gIHJlYWRvbmx5IGFsZXJ0VHlwZTogRGF0YWRvZ0FsZXJ0VHlwZTtcblxuICAvKipcbiAgICogVGhlIGRhaWx5IGxvZyBxdW90YSBzZXR0aW5ncy5cbiAgICovXG4gIHJlYWRvbmx5IGRhaWx5TG9nUXVvdGE6IERhdGFkb2dMb2dRdW90YVByb3BzO1xuXG4gIC8qKlxuICAgKiBUaGlzIHZhbHVlIHNob3VsZCBiZSB1c2VkIGlmIHRoZXJlIGlzIG5vIGxvZyBtZXNzYWdlIHdpdGhpbiAyNCBob3VycyBvciBtaXNzaW5nIGhpc3RvcmljYWwgZGF0YS5cbiAgICogV2l0aG91dCBzZXR0aW5nIHRoaXMgdmFsdWUgaXQgd2lsbCBsZWFkIHRvIGFuIGVtcHR5IHJlc3VsdCBhbmQgdGhlcmVmb3JlIHRyaWdnZXIgYW4gYWxlcnQuXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNwYXJzZUxvZ2dpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFkb2dMb2dRdW90YVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBkYWlseSBsb2cgcXVvdGEgZm9yIHRoZSB0ZWFtLXNwZWNpZmljIGluZGV4IGluIG1pbGxpb24gZXZlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVJbk1pbGxpb25FdmVudHM6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHdhcm5pbmcgdGhyZXNob2xkIGZvciB0aGUgZGFpbHkgbG9nIHF1b3RhIG1vbml0b3IgaW4gcGVyY2VudC5cbiAgICovXG4gIHJlYWRvbmx5IHdhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGFsYXJtIHRocmVzaG9sZCBmb3IgdGhlIGRhaWx5IGxvZyBxdW90YSBtb25pdG9yIGluIHBlcmNlbnQuXG4gICAqIFRoZSB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTAwIGFuZCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHdhcm5pbmcgdGhyZXNob2xkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxlcnRUaHJlc2hvbGRJblBlcmNlbnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCYXNpYyBtb25pdG9yaW5nIGFuZCBhbGVydGluZyBmb3IgYSBEYXRhZG9nIGxvZ3MgaW5kZXguXG4gKiBJdCBmb2xsb3dzIHRoZSBEYXRhZG9nIGd1aWRlIGF0IGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2xvZ3MvZ3VpZGUvbG9ncy1tb25pdG9ycy1vbi12b2x1bWVzL1xuICogYW5kIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUgbW9uaXRvcnMuXG4gKiAgIDEuIEEgbWV0cmljIGFsZXJ0IHRoYXQgZmlyZXMgd2hlbiB5b3UgcmVhY2ggYSBjZXJ0YWluIHRocmVzaG9sZCBvZiB5b3VyIGRhaWx5IGxvZyBxdW90YS5cbiAqICAgMi4gQW4gYW5vbWFseSBtb25pdG9yIHRoYXQgZGV0ZWN0cyBsb2cgYW1vdW50IHNwaWtlcy5cbiAqICAgMy4gQW4gZXZlbnQgYWxlcnQgdGhhdCBmaXJlcyB3aGVuIHlvdSBoaXQgdGhlIGRhaWx5IGxvZyBxdW90YS5cbiAqXG4gKiBBIGRhdGFkb2cgbG9nIGluZGV4IGlzIHRlYW0gc3BlY2lmaWMgYW5kIHRodXMgdGhlIG1vbml0b3IgbmVlZHMgdG8gYmUgZGVwbG95ZWQganVzdCBvbmNlIHBlciBpbmRleC90ZWFtLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nTG9nSW5kZXhNb25pdG9yaW5nUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IERhdGFkb2dMb2dEYWlseVF1b3RhTW9uaXRvcih0aGlzLCAnRGF0YWRvZ0xvZ0RhaWx5UXVvdGFNb25pdG9yJywgcHJvcHMpO1xuICAgIG5ldyBEYXRhZG9nTG9nc0Fub21hbHlNb25pdG9yKHRoaXMsICdEYXRhZG9nTG9nQWxlcnRBbm9tYWx5TW9uaXRvcicsIHByb3BzKTtcbiAgICBuZXcgRGF0YWRvZ0xvZ0RhaWx5UXVvdGFSZWFjaGVkTW9uaXRvcih0aGlzLCAnRGF0YWRvZ0xvZ0RhaWx5UXVvdGFSZWFjaGVkVjJNb25pdG9yJywgcHJvcHMpO1xuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oe1xuICAgICAgdmFsaWRhdGU6ICgpOiBzdHJpbmdbXSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBpZiAocHJvcHMuZGFpbHlMb2dRdW90YS53YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50IDwgMCB8fCBwcm9wcy5kYWlseUxvZ1F1b3RhLndhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQgPiAxMDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbd2FybmluZ1RocmVzaG9sZEluUGVyY2VudF06IGV4cGVjdGluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwMCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5kYWlseUxvZ1F1b3RhLmFsZXJ0VGhyZXNob2xkSW5QZXJjZW50IDwgMCB8fCBwcm9wcy5kYWlseUxvZ1F1b3RhLmFsZXJ0VGhyZXNob2xkSW5QZXJjZW50ID4gMTAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goJ0ludmFsaWQgW2FsZXJ0VGhyZXNob2xkSW5QZXJjZW50XTogZXhwZWN0aW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmRhaWx5TG9nUXVvdGEuYWxlcnRUaHJlc2hvbGRJblBlcmNlbnQgPCBwcm9wcy5kYWlseUxvZ1F1b3RhLndhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbYWxlcnRUaHJlc2hvbGRJblBlcmNlbnRdOiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbd2FybmluZ1RocmVzaG9sZEluUGVyY2VudF0nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBEYXRhZG9nTG9nRGFpbHlRdW90YU1vbml0b3IgZXh0ZW5kcyBEYXRhZG9nTW9uaXRvciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nTG9nSW5kZXhNb25pdG9yaW5nUHJvcHMpIHtcbiAgICBjb25zdCBsb2dRdW90YUluRXZlbnRzID0gTWF0aC5mbG9vcihwcm9wcy5kYWlseUxvZ1F1b3RhLnZhbHVlSW5NaWxsaW9uRXZlbnRzICogMV8wMDBfMDAwKTtcbiAgICBjb25zdCB3YXJuaW5nVGhyZXNob2xkID0gTWF0aC5mbG9vcihsb2dRdW90YUluRXZlbnRzICogKHByb3BzLmRhaWx5TG9nUXVvdGEud2FybmluZ1RocmVzaG9sZEluUGVyY2VudCAvIDEwMCkpO1xuICAgIGNvbnN0IGFsZXJ0VGhyZXNob2xkID0gTWF0aC5mbG9vcihsb2dRdW90YUluRXZlbnRzICogKHByb3BzLmRhaWx5TG9nUXVvdGEuYWxlcnRUaHJlc2hvbGRJblBlcmNlbnQgLyAxMDApKTtcblxuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgYWxlcnRUeXBlczogW3Byb3BzLmFsZXJ0VHlwZV0sXG4gICAgICBtb25pdG9yOiB7XG4gICAgICAgIG5hbWU6ICdMb2cgcXVvdGEgYWxtb3N0IHJlYWNoZWQnLFxuICAgICAgICB0eXBlOiAnbWV0cmljIGFsZXJ0JyxcbiAgICAgICAgcXVlcnk6IGBzdW0obGFzdF8xZCk6c3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLmxvZ3MuaW5nZXN0ZWRfZXZlbnRze2RhdGFkb2dfaXNfZXhjbHVkZWQ6ZmFsc2UsZGF0YWRvZ19pbmRleDoke3Byb3BzLmluZGV4TmFtZX19LmFzX2NvdW50KCkgPj0gJHthbGVydFRocmVzaG9sZH1gLFxuICAgICAgICBtZXNzYWdlOiBgW1AzXSBJbnNwZWN0IHlvdXIgbG9nIHZvbHVtZSBhdCAke2RhdGFkb2dMb2dzU2VhcmNoV2l0aEluZGV4RmlsdGVyRGVlcExpbmsoXG4gICAgICAgICAgcHJvcHMuaW5kZXhOYW1lLFxuICAgICAgICApfSBvciBhZGFwdCB0aGUgbG9nIHF1b3RhIGF0ICR7ZGF0YWRvZ0xvZ3NJbmRleGVzQ29uZmlndXJhdGlvbkRlZXBMaW5rfWAsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICB0aHJlc2hvbGRzOiB7XG4gICAgICAgICAgICBjcml0aWNhbDogYWxlcnRUaHJlc2hvbGQsXG4gICAgICAgICAgICB3YXJuaW5nOiB3YXJuaW5nVGhyZXNob2xkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5jbHVkZV90YWdzOiBmYWxzZSxcbiAgICAgICAgICBub3RpZnlfbm9fZGF0YTogIXByb3BzLnNwYXJzZUxvZ2dpbmcsXG4gICAgICAgICAgbm9fZGF0YV90aW1lZnJhbWU6IDI0ICogNjAsIC8vIDEgZGF5XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIERhdGFkb2dMb2dzQW5vbWFseU1vbml0b3IgZXh0ZW5kcyBEYXRhZG9nTW9uaXRvciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nTG9nSW5kZXhNb25pdG9yaW5nUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIGFsZXJ0VHlwZXM6IFtwcm9wcy5hbGVydFR5cGVdLFxuICAgICAgbW9uaXRvcjoge1xuICAgICAgICBuYW1lOiAnTG9nIGFtb3VudCBpcyByaXNpbmcgdG8gdW5leHBlY3RlZCBsZXZlbHMnLFxuICAgICAgICB0eXBlOiAnbWV0cmljIGFsZXJ0JyxcbiAgICAgICAgcXVlcnk6IGBhdmcobGFzdF80aCk6YW5vbWFsaWVzKHN1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5sb2dzLmluZ2VzdGVkX2V2ZW50c3tkYXRhZG9nX2lzX2V4Y2x1ZGVkOmZhbHNlLGRhdGFkb2dfaW5kZXg6JHtwcm9wcy5pbmRleE5hbWV9fS5hc19jb3VudCgpLCAncm9idXN0JywgMiwgZGlyZWN0aW9uPSdhYm92ZScsIGFsZXJ0X3dpbmRvdz0nbGFzdF8xNW0nLCBpbnRlcnZhbD02MCwgY291bnRfZGVmYXVsdF96ZXJvPSd0cnVlJywgc2Vhc29uYWxpdHk9J3dlZWtseScsIHRpbWV6b25lPSdldXJvcGUvYmVybGluJykgPj0gMWAsXG4gICAgICAgIG1lc3NhZ2U6IGBbUDRdIExvZ3MgYXJlIGdldHRpbmcgb3V0IG9mIGNvbnRyb2w6ICR7ZGF0YWRvZ0xvZ3NTZWFyY2hXaXRoSW5kZXhGaWx0ZXJEZWVwTGluayhcbiAgICAgICAgICBwcm9wcy5pbmRleE5hbWUsXG4gICAgICAgICl9YCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGluY2x1ZGVfdGFnczogZmFsc2UsXG4gICAgICAgICAgbm90aWZ5X25vX2RhdGE6ICFwcm9wcy5zcGFyc2VMb2dnaW5nLFxuICAgICAgICAgIHRocmVzaG9sZF93aW5kb3dzOiB7XG4gICAgICAgICAgICB0cmlnZ2VyX3dpbmRvdzogJ2xhc3RfMTVtJyxcbiAgICAgICAgICAgIHJlY292ZXJ5X3dpbmRvdzogJ2xhc3RfMTVtJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBEYXRhZG9nTG9nRGFpbHlRdW90YVJlYWNoZWRNb25pdG9yIGV4dGVuZHMgRGF0YWRvZ01vbml0b3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBhbGVydFR5cGVzOiBbcHJvcHMuYWxlcnRUeXBlXSxcbiAgICAgIG1vbml0b3I6IHtcbiAgICAgICAgbmFtZTogJ0xvZyBxdW90YSByZWFjaGVkJyxcbiAgICAgICAgdHlwZTogJ2V2ZW50LXYyIGFsZXJ0JyxcbiAgICAgICAgcXVlcnk6IGBldmVudHMoXCJzb3VyY2U6ZGF0YWRvZyBkYXRhZG9nX2luZGV4OiR7cHJvcHMuaW5kZXhOYW1lfSBEYWlseSBxdW90YSByZWFjaGVkXCIpLnJvbGx1cChcImNvdW50XCIpLmxhc3QoXCI1bVwiKSA+IDBgLFxuICAgICAgICBtZXNzYWdlOiBgW1AyXSBUaGUgbG9nIHF1b3RlIGZvciB0aGUgaW5kZXggaGFzIGJlZW4gcmVhY2hlZC4gSWYgeW91IGRvIG5vdCBpbmNyZWFzZSB0aGUgcXVvdGEgYXQgJHtkYXRhZG9nTG9nc0luZGV4ZXNDb25maWd1cmF0aW9uRGVlcExpbmt9LCBubyBuZXcgbG9ncyB3aWxsIGJlIGluZGV4ZWQgdW50aWwgdGhlIHF1b3RhIGlzIHJlc2V0IGF0IDI6MDBwbSBVVEMuYCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHRpbWVvdXRfaDogMjQsXG4gICAgICAgICAgdGhyZXNob2xkczoge1xuICAgICAgICAgICAgY3JpdGljYWw6IDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGF0YWRvZ0xvZ3NTZWFyY2hXaXRoSW5kZXhGaWx0ZXJEZWVwTGluayhpbmRleE5hbWU6IHN0cmluZykge1xuICByZXR1cm4gYGh0dHBzOi8vYXBwLmRhdGFkb2docS5ldS9sb2dzP2luZGV4PSR7aW5kZXhOYW1lfWA7XG59XG5cbmNvbnN0IGRhdGFkb2dMb2dzSW5kZXhlc0NvbmZpZ3VyYXRpb25EZWVwTGluayA9ICdodHRwczovL2FwcC5kYXRhZG9naHEuZXUvbG9ncy9waXBlbGluZXMvaW5kZXhlcyc7XG4iXX0=
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhZG9nL2RhdGFkb2dMb2dJbmRleE1vbml0b3JpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBdUM7QUFDdkMscURBQW9FO0FBbURwRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLHlCQUEwQixTQUFRLHNCQUFTO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLDJCQUEyQixDQUFDLElBQUksRUFBRSw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLHlCQUF5QixDQUFDLElBQUksRUFBRSwrQkFBK0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLGtDQUFrQyxDQUFDLElBQUksRUFBRSxzQ0FBc0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU1RixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0QixRQUFRLEVBQUUsR0FBYSxFQUFFO2dCQUN2QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLEVBQUU7b0JBQzVHLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkVBQTJFLENBQUMsQ0FBQztpQkFDMUY7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsRUFBRTtvQkFDeEcsTUFBTSxDQUFDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO2lCQUN4RjtnQkFDRCxJQUFJLEtBQUssQ0FBQyxhQUFh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QUFjLEVBQUUsVUFBVTt3QkFDMUIsZUFBZSxFQUFFLFVBQVU7cUJBQzVCO2lCQUNGO2dCQUNELElBQUksRUFBRTtvQkFDSixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO2lCQUMvQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsTUFBTSxrQ0FBbUMsU0FBUSwrQkFBYztJQUM3RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXFDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDN0IsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxHQUFHLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMscUJBQXFCO2dCQUN0RSxJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixLQUFLLEVBQUUsd0NBQXdDLEtBQUssQ0FBQyxTQUFTLHVEQUF1RDtnQkFDckgsT0FBTyxFQUFFLDBGQUEwRix1Q0FBdUMsdUVBQXVFO2dCQUNqTixPQUFPLEVBQUU7b0JBQ1AsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsVUFBVSxFQUFFO3dCQUNWLFFBQVEsRUFBRSxDQUFDO3FCQUNaO2lCQUNGO2dCQUNELElBQUksRUFBRTtvQkFDSixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO2lCQUMvQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBRUQsU0FBUyx3Q0FBd0MsQ0FBQyxTQUFpQjtJQUNqRSxPQUFPLHVDQUF1QyxTQUFTLEVBQUUsQ0FBQztBQUM1RCxDQUFDO0FBRUQsTUFBTSx1Q0FBdUMsR0FBRyxpREFBaUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRGF0YWRvZ01vbml0b3IsIERhdGFkb2dBbGVydFR5cGUgfSBmcm9tICcuL2RhdGFkb2dNb25pdG9yJztcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhZG9nTG9nSW5kZXhNb25pdG9yaW5nUHJvcHMge1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB5b3VyIHNlcnZpY2UgaW4gRGF0YWRvZy4gQ2FuIGJlIHVzZWQgdG8gcXVlcnkgdGhlIG1vbml0b3JzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIERhdGFkb2cgaW5kZXguXG4gICAqL1xuICByZWFkb25seSBpbmRleE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRvIHVzZSBmb3IgYWxlcnRpbmcuXG4gICAqIEZvciBPcHNHZW5pZSwgeW91IG5lZWQgdG8gaW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSAnb3BzZ2VuaWUtaW50ZWdyYXRpb24nIGFjY291bnQgbW9kdWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxlcnRUeXBlOiBEYXRhZG9nQWxlcnRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgZGFpbHkgbG9nIHF1b3RhIHNldHRpbmdzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGFpbHlMb2dRdW90YTogRGF0YWRvZ0xvZ1F1b3RhUHJvcHM7XG5cbiAgLyoqXG4gICAqIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHVzZWQgaWYgdGhlcmUgaXMgbm8gbG9nIG1lc3NhZ2Ugd2l0aGluIDI0IGhvdXJzIG9yIG1pc3NpbmcgaGlzdG9yaWNhbCBkYXRhLlxuICAgKiBXaXRob3V0IHNldHRpbmcgdGhpcyB2YWx1ZSBpdCB3aWxsIGxlYWQgdG8gYW4gZW1wdHkgcmVzdWx0IGFuZCB0aGVyZWZvcmUgdHJpZ2dlciBhbiBhbGVydC5cbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3BhcnNlTG9nZ2luZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWRvZ0xvZ1F1b3RhUHJvcHMge1xuICAvKipcbiAgICogVGhlIGRhaWx5IGxvZyBxdW90YSBmb3IgdGhlIHRlYW0tc3BlY2lmaWMgaW5kZXggaW4gbWlsbGlvbiBldmVudHMuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZUluTWlsbGlvbkV2ZW50czogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgd2FybmluZyB0aHJlc2hvbGQgZm9yIHRoZSBkYWlseSBsb2cgcXVvdGEgbW9uaXRvciBpbiBwZXJjZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgd2FybmluZ1RocmVzaG9sZEluUGVyY2VudDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYWxhcm0gdGhyZXNob2xkIGZvciB0aGUgZGFpbHkgbG9nIHF1b3RhIG1vbml0b3IgaW4gcGVyY2VudC5cbiAgICogVGhlIHZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMDAgYW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgd2FybmluZyB0aHJlc2hvbGQuXG4gICAqL1xuICByZWFkb25seSBhbGVydFRocmVzaG9sZEluUGVyY2VudDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJhc2ljIG1vbml0b3JpbmcgYW5kIGFsZXJ0aW5nIGZvciBhIERhdGFkb2cgbG9ncyBpbmRleC5cbiAqIEl0IGZvbGxvd3MgdGhlIERhdGFkb2cgZ3VpZGUgYXQgaHR0cHM6Ly9kb2NzLmRhdGFkb2docS5jb20vbG9ncy9ndWlkZS9sb2dzLW1vbml0b3JzLW9uLXZvbHVtZXMvXG4gKiBhbmQgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyB0aHJlZSBtb25pdG9ycy5cbiAqICAgMS4gQSBtZXRyaWMgYWxlcnQgdGhhdCBmaXJlcyB3aGVuIHlvdSByZWFjaCBhIGNlcnRhaW4gdGhyZXNob2xkIG9mIHlvdXIgZGFpbHkgbG9nIHF1b3RhLlxuICogICAyLiBBbiBhbm9tYWx5IG1vbml0b3IgdGhhdCBkZXRlY3RzIGxvZyBhbW91bnQgc3Bpa2VzLlxuICogICAzLiBBbiBldmVudCBhbGVydCB0aGF0IGZpcmVzIHdoZW4geW91IGhpdCB0aGUgZGFpbHkgbG9nIHF1b3RhLlxuICpcbiAqIEEgZGF0YWRvZyBsb2cgaW5kZXggaXMgdGVhbSBzcGVjaWZpYyBhbmQgdGh1cyB0aGUgbW9uaXRvciBuZWVkcyB0byBiZSBkZXBsb3llZCBqdXN0IG9uY2UgcGVyIGluZGV4L3RlYW0uXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhZG9nTG9nSW5kZXhNb25pdG9yaW5nIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFkb2dMb2dJbmRleE1vbml0b3JpbmdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBuZXcgRGF0YWRvZ0xvZ0RhaWx5UXVvdGFNb25pdG9yKHRoaXMsICdEYXRhZG9nTG9nRGFpbHlRdW90YU1vbml0b3InLCBwcm9wcyk7XG4gICAgbmV3IERhdGFkb2dMb2dzQW5vbWFseU1vbml0b3IodGhpcywgJ0RhdGFkb2dMb2dBbGVydEFub21hbHlNb25pdG9yJywgcHJvcHMpO1xuICAgIG5ldyBEYXRhZG9nTG9nRGFpbHlRdW90YVJlYWNoZWRNb25pdG9yKHRoaXMsICdEYXRhZG9nTG9nRGFpbHlRdW90YVJlYWNoZWRWMk1vbml0b3InLCBwcm9wcyk7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbih7XG4gICAgICB2YWxpZGF0ZTogKCk6IHN0cmluZ1tdID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGlmIChwcm9wcy5kYWlseUxvZ1F1b3RhLndhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQgPCAwIHx8IHByb3BzLmRhaWx5TG9nUXVvdGEud2FybmluZ1RocmVzaG9sZEluUGVyY2VudCA+IDEwMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFt3YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50XTogZXhwZWN0aW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmRhaWx5TG9nUXVvdGEuYWxlcnRUaHJlc2hvbGRJblBlcmNlbnQgPCAwIHx8IHByb3BzLmRhaWx5TG9nUXVvdGEuYWxlcnRUaHJlc2hvbGRJblBlcmNlbnQgPiAxMDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbYWxlcnRUaHJlc2hvbGRJblBlcmNlbnRdOiBleHBlY3RpbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxMDAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMuZGFpbHlMb2dRdW90YS5hbGVydFRocmVzaG9sZEluUGVyY2VudCA8IHByb3BzLmRhaWx5TG9nUXVvdGEud2FybmluZ1RocmVzaG9sZEluUGVyY2VudCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFthbGVydFRocmVzaG9sZEluUGVyY2VudF06IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFt3YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50XScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGNvbW1vbk1vbml0b3JOYW1lUHJlZml4ID0gKGluZGV4TmFtZTogc3RyaW5nKSA9PiBgJyR7aW5kZXhOYW1lfScgaW5kZXhgO1xuY29uc3QgY29tbW9uVGFncyA9IChpbmRleE5hbWU6IHN0cmluZykgPT4gW2Bsb2dJbmRleDoke2luZGV4TmFtZX1gXTtcblxuY2xhc3MgRGF0YWRvZ0xvZ0RhaWx5UXVvdGFNb25pdG9yIGV4dGVuZHMgRGF0YWRvZ01vbml0b3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgY29uc3QgbG9nUXVvdGFJbkV2ZW50cyA9IE1hdGguZmxvb3IocHJvcHMuZGFpbHlMb2dRdW90YS52YWx1ZUluTWlsbGlvbkV2ZW50cyAqIDFfMDAwXzAwMCk7XG4gICAgY29uc3Qgd2FybmluZ1RocmVzaG9sZCA9IE1hdGguZmxvb3IobG9nUXVvdGFJbkV2ZW50cyAqIChwcm9wcy5kYWlseUxvZ1F1b3RhLndhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQgLyAxMDApKTtcbiAgICBjb25zdCBhbGVydFRocmVzaG9sZCA9IE1hdGguZmxvb3IobG9nUXVvdGFJbkV2ZW50cyAqIChwcm9wcy5kYWlseUxvZ1F1b3RhLmFsZXJ0VGhyZXNob2xkSW5QZXJjZW50IC8gMTAwKSk7XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIGFsZXJ0VHlwZXM6IFtwcm9wcy5hbGVydFR5cGVdLFxuICAgICAgbW9uaXRvcjoge1xuICAgICAgICBuYW1lOiBgJHtjb21tb25Nb25pdG9yTmFtZVByZWZpeChwcm9wcy5pbmRleE5hbWUpfTogTG9nIHF1b3RhIGFsbW9zdCByZWFjaGVkYCxcbiAgICAgICAgdHlwZTogJ21ldHJpYyBhbGVydCcsXG4gICAgICAgIHF1ZXJ5OiBgc3VtKGxhc3RfMWQpOnN1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5sb2dzLmluZ2VzdGVkX2V2ZW50c3tkYXRhZG9nX2lzX2V4Y2x1ZGVkOmZhbHNlLGRhdGFkb2dfaW5kZXg6JHtwcm9wcy5pbmRleE5hbWV9fS5hc19jb3VudCgpID49ICR7YWxlcnRUaHJlc2hvbGR9YCxcbiAgICAgICAgbWVzc2FnZTogYFtQM10gSW5zcGVjdCB5b3VyIGxvZyB2b2x1bWUgYXQgJHtkYXRhZG9nTG9nc1NlYXJjaFdpdGhJbmRleEZpbHRlckRlZXBMaW5rKFxuICAgICAgICAgIHByb3BzLmluZGV4TmFtZSxcbiAgICAgICAgKX0gb3IgYWRhcHQgdGhlIGxvZyBxdW90YSBhdCAke2RhdGFkb2dMb2dzSW5kZXhlc0NvbmZpZ3VyYXRpb25EZWVwTGlua31gLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgdGhyZXNob2xkczoge1xuICAgICAgICAgICAgY3JpdGljYWw6IGFsZXJ0VGhyZXNob2xkLFxuICAgICAgICAgICAgd2FybmluZzogd2FybmluZ1RocmVzaG9sZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluY2x1ZGVfdGFnczogZmFsc2UsXG4gICAgICAgICAgbm90aWZ5X25vX2RhdGE6ICFwcm9wcy5zcGFyc2VMb2dnaW5nLFxuICAgICAgICAgIG5vX2RhdGFfdGltZWZyYW1lOiAyNCAqIDYwLCAvLyAxIGRheVxuICAgICAgICB9LFxuICAgICAgICB0YWdzOiBbXG4gICAgICAgICAgLi4uY29tbW9uVGFncyhwcm9wcy5pbmRleE5hbWUpLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBEYXRhZG9nTG9nc0Fub21hbHlNb25pdG9yIGV4dGVuZHMgRGF0YWRvZ01vbml0b3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBhbGVydFR5cGVzOiBbcHJvcHMuYWxlcnRUeXBlXSxcbiAgICAgIG1vbml0b3I6IHtcbiAgICAgICAgbmFtZTogYCR7Y29tbW9uTW9uaXRvck5hbWVQcmVmaXgocHJvcHMuaW5kZXhOYW1lKX06IExvZyBhbW91bnQgaXMgcmlzaW5nIHRvIHVuZXhwZWN0ZWQgbGV2ZWxzYCxcbiAgICAgICAgdHlwZTogJ21ldHJpYyBhbGVydCcsXG4gICAgICAgIHF1ZXJ5OiBgYXZnKGxhc3RfNGgpOmFub21hbGllcyhzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UubG9ncy5pbmdlc3RlZF9ldmVudHN7ZGF0YWRvZ19pc19leGNsdWRlZDpmYWxzZSxkYXRhZG9nX2luZGV4OiR7cHJvcHMuaW5kZXhOYW1lfX0uYXNfY291bnQoKSwgJ3JvYnVzdCcsIDIsIGRpcmVjdGlvbj0nYWJvdmUnLCBhbGVydF93aW5kb3c9J2xhc3RfMTVtJywgaW50ZXJ2YWw9NjAsIGNvdW50X2RlZmF1bHRfemVybz0ndHJ1ZScsIHNlYXNvbmFsaXR5PSd3ZWVrbHknLCB0aW1lem9uZT0nZXVyb3BlL2JlcmxpbicpID49IDFgLFxuICAgICAgICBtZXNzYWdlOiBgW1A0XSBMb2dzIGFyZSBnZXR0aW5nIG91dCBvZiBjb250cm9sOiAke2RhdGFkb2dMb2dzU2VhcmNoV2l0aEluZGV4RmlsdGVyRGVlcExpbmsoXG4gICAgICAgICAgcHJvcHMuaW5kZXhOYW1lLFxuICAgICAgICApfWAsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBpbmNsdWRlX3RhZ3M6IGZhbHNlLFxuICAgICAgICAgIG5vdGlmeV9ub19kYXRhOiAhcHJvcHMuc3BhcnNlTG9nZ2luZyxcbiAgICAgICAgICB0aHJlc2hvbGRfd2luZG93czoge1xuICAgICAgICAgICAgdHJpZ2dlcl93aW5kb3c6ICdsYXN0XzE1bScsXG4gICAgICAgICAgICByZWNvdmVyeV93aW5kb3c6ICdsYXN0XzE1bScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdGFnczogW1xuICAgICAgICAgIC4uLmNvbW1vblRhZ3MocHJvcHMuaW5kZXhOYW1lKSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgRGF0YWRvZ0xvZ0RhaWx5UXVvdGFSZWFjaGVkTW9uaXRvciBleHRlbmRzIERhdGFkb2dNb25pdG9yIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFkb2dMb2dJbmRleE1vbml0b3JpbmdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgYWxlcnRUeXBlczogW3Byb3BzLmFsZXJ0VHlwZV0sXG4gICAgICBtb25pdG9yOiB7XG4gICAgICAgIG5hbWU6IGAke2NvbW1vbk1vbml0b3JOYW1lUHJlZml4KHByb3BzLmluZGV4TmFtZSl9OiBMb2cgcXVvdGEgcmVhY2hlZGAsXG4gICAgICAgIHR5cGU6ICdldmVudC12MiBhbGVydCcsXG4gICAgICAgIHF1ZXJ5OiBgZXZlbnRzKFwic291cmNlOmRhdGFkb2cgZGF0YWRvZ19pbmRleDoke3Byb3BzLmluZGV4TmFtZX0gRGFpbHkgcXVvdGEgcmVhY2hlZFwiKS5yb2xsdXAoXCJjb3VudFwiKS5sYXN0KFwiNW1cIikgPiAwYCxcbiAgICAgICAgbWVzc2FnZTogYFtQMl0gVGhlIGxvZyBxdW90ZSBmb3IgdGhlIGluZGV4IGhhcyBiZWVuIHJlYWNoZWQuIElmIHlvdSBkbyBub3QgaW5jcmVhc2UgdGhlIHF1b3RhIGF0ICR7ZGF0YWRvZ0xvZ3NJbmRleGVzQ29uZmlndXJhdGlvbkRlZXBMaW5rfSwgbm8gbmV3IGxvZ3Mgd2lsbCBiZSBpbmRleGVkIHVudGlsIHRoZSBxdW90YSBpcyByZXNldCBhdCAyOjAwcG0gVVRDLmAsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICB0aW1lb3V0X2g6IDI0LFxuICAgICAgICAgIHRocmVzaG9sZHM6IHtcbiAgICAgICAgICAgIGNyaXRpY2FsOiAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICAuLi5jb21tb25UYWdzKHByb3BzLmluZGV4TmFtZSksXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRhdGFkb2dMb2dzU2VhcmNoV2l0aEluZGV4RmlsdGVyRGVlcExpbmsoaW5kZXhOYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGBodHRwczovL2FwcC5kYXRhZG9naHEuZXUvbG9ncz9pbmRleD0ke2luZGV4TmFtZX1gO1xufVxuXG5jb25zdCBkYXRhZG9nTG9nc0luZGV4ZXNDb25maWd1cmF0aW9uRGVlcExpbmsgPSAnaHR0cHM6Ly9hcHAuZGF0YWRvZ2hxLmV1L2xvZ3MvcGlwZWxpbmVzL2luZGV4ZXMnO1xuIl19
|
package/package.json
CHANGED
package/version.json
CHANGED