@rio-cloud/cdk-v2-constructs 6.3.2 → 6.4.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 +54 -17
- package/CHANGELOG.md +9 -0
- package/docs/API.md +35 -0
- package/lib/contributions/{team-oubout-order-book → team-outbound-order-book}/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.d.ts +10 -0
- package/lib/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.js +89 -0
- package/lib/contributions/{team-oubout-order-book → team-outbound-order-book}/aws-ecs-abruptly-stopped-monitor/index.js +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/package.json +1 -1
- package/version.json +1 -1
- package/lib/contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.js +0 -76
- /package/lib/contributions/{team-oubout-order-book → team-outbound-order-book}/aws-ecs-abruptly-stopped-monitor/index.d.ts +0 -0
package/.jsii
CHANGED
|
@@ -4331,8 +4331,8 @@
|
|
|
4331
4331
|
"stability": "stable"
|
|
4332
4332
|
},
|
|
4333
4333
|
"locationInModule": {
|
|
4334
|
-
"filename": "src/contributions/team-
|
|
4335
|
-
"line":
|
|
4334
|
+
"filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
|
|
4335
|
+
"line": 77
|
|
4336
4336
|
},
|
|
4337
4337
|
"parameters": [
|
|
4338
4338
|
{
|
|
@@ -4357,11 +4357,29 @@
|
|
|
4357
4357
|
},
|
|
4358
4358
|
"kind": "class",
|
|
4359
4359
|
"locationInModule": {
|
|
4360
|
-
"filename": "src/contributions/team-
|
|
4361
|
-
"line":
|
|
4360
|
+
"filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
|
|
4361
|
+
"line": 73
|
|
4362
4362
|
},
|
|
4363
4363
|
"name": "AwsEcsAbruptlyStoppedMonitor",
|
|
4364
|
-
"
|
|
4364
|
+
"properties": [
|
|
4365
|
+
{
|
|
4366
|
+
"const": true,
|
|
4367
|
+
"docs": {
|
|
4368
|
+
"stability": "stable"
|
|
4369
|
+
},
|
|
4370
|
+
"immutable": true,
|
|
4371
|
+
"locationInModule": {
|
|
4372
|
+
"filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
|
|
4373
|
+
"line": 75
|
|
4374
|
+
},
|
|
4375
|
+
"name": "DEFAULT_LOG_FORWARDER_ARN",
|
|
4376
|
+
"static": true,
|
|
4377
|
+
"type": {
|
|
4378
|
+
"primitive": "string"
|
|
4379
|
+
}
|
|
4380
|
+
}
|
|
4381
|
+
],
|
|
4382
|
+
"symbolId": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor:AwsEcsAbruptlyStoppedMonitor"
|
|
4365
4383
|
},
|
|
4366
4384
|
"@rio-cloud/cdk-v2-constructs.BackupPolicy": {
|
|
4367
4385
|
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
@@ -5936,8 +5954,8 @@
|
|
|
5936
5954
|
"fqn": "@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps",
|
|
5937
5955
|
"kind": "interface",
|
|
5938
5956
|
"locationInModule": {
|
|
5939
|
-
"filename": "src/contributions/team-
|
|
5940
|
-
"line":
|
|
5957
|
+
"filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
|
|
5958
|
+
"line": 8
|
|
5941
5959
|
},
|
|
5942
5960
|
"name": "EcsAbruptlyStoppedMonitorProps",
|
|
5943
5961
|
"properties": [
|
|
@@ -5950,8 +5968,8 @@
|
|
|
5950
5968
|
},
|
|
5951
5969
|
"immutable": true,
|
|
5952
5970
|
"locationInModule": {
|
|
5953
|
-
"filename": "src/contributions/team-
|
|
5954
|
-
"line":
|
|
5971
|
+
"filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
|
|
5972
|
+
"line": 15
|
|
5955
5973
|
},
|
|
5956
5974
|
"name": "serviceName",
|
|
5957
5975
|
"type": {
|
|
@@ -5967,8 +5985,8 @@
|
|
|
5967
5985
|
},
|
|
5968
5986
|
"immutable": true,
|
|
5969
5987
|
"locationInModule": {
|
|
5970
|
-
"filename": "src/contributions/team-
|
|
5971
|
-
"line":
|
|
5988
|
+
"filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
|
|
5989
|
+
"line": 39
|
|
5972
5990
|
},
|
|
5973
5991
|
"name": "clusterArn",
|
|
5974
5992
|
"optional": true,
|
|
@@ -5976,6 +5994,25 @@
|
|
|
5976
5994
|
"primitive": "string"
|
|
5977
5995
|
}
|
|
5978
5996
|
},
|
|
5997
|
+
{
|
|
5998
|
+
"abstract": true,
|
|
5999
|
+
"docs": {
|
|
6000
|
+
"default": "{@link AwsEcsAbruptlyStoppedMonitor.DEFAULT_LOG_FORWARDER_ARN }",
|
|
6001
|
+
"remarks": "Currently, two values are know to be exported by the account modules:\n* datadog-forwarder-ForwarderArn: exported by the 3rd party account modules [Datadog-forwarder](https://github.com/DataDog/datadog-serverless-functions/releases)\n* custom-resource-datadog-logforwarder-function-arn: exported by the deprecated custom account module [datadog-integration](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/datadog-integration/browse).",
|
|
6002
|
+
"stability": "stable",
|
|
6003
|
+
"summary": "ARN of the Datadog forwarder Lambda function used to forward the CloudWatch logs to Datadog."
|
|
6004
|
+
},
|
|
6005
|
+
"immutable": true,
|
|
6006
|
+
"locationInModule": {
|
|
6007
|
+
"filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
|
|
6008
|
+
"line": 49
|
|
6009
|
+
},
|
|
6010
|
+
"name": "datadogLogForwarderLambdaArn",
|
|
6011
|
+
"optional": true,
|
|
6012
|
+
"type": {
|
|
6013
|
+
"primitive": "string"
|
|
6014
|
+
}
|
|
6015
|
+
},
|
|
5979
6016
|
{
|
|
5980
6017
|
"abstract": true,
|
|
5981
6018
|
"docs": {
|
|
@@ -5986,8 +6023,8 @@
|
|
|
5986
6023
|
},
|
|
5987
6024
|
"immutable": true,
|
|
5988
6025
|
"locationInModule": {
|
|
5989
|
-
"filename": "src/contributions/team-
|
|
5990
|
-
"line":
|
|
6026
|
+
"filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
|
|
6027
|
+
"line": 25
|
|
5991
6028
|
},
|
|
5992
6029
|
"name": "notification",
|
|
5993
6030
|
"optional": true,
|
|
@@ -6004,8 +6041,8 @@
|
|
|
6004
6041
|
},
|
|
6005
6042
|
"immutable": true,
|
|
6006
6043
|
"locationInModule": {
|
|
6007
|
-
"filename": "src/contributions/team-
|
|
6008
|
-
"line":
|
|
6044
|
+
"filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
|
|
6045
|
+
"line": 33
|
|
6009
6046
|
},
|
|
6010
6047
|
"name": "priority",
|
|
6011
6048
|
"optional": true,
|
|
@@ -6014,7 +6051,7 @@
|
|
|
6014
6051
|
}
|
|
6015
6052
|
}
|
|
6016
6053
|
],
|
|
6017
|
-
"symbolId": "src/contributions/team-
|
|
6054
|
+
"symbolId": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor:EcsAbruptlyStoppedMonitorProps"
|
|
6018
6055
|
},
|
|
6019
6056
|
"@rio-cloud/cdk-v2-constructs.FargateTaskDefinitionProps": {
|
|
6020
6057
|
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
@@ -16738,5 +16775,5 @@
|
|
|
16738
16775
|
}
|
|
16739
16776
|
},
|
|
16740
16777
|
"version": "0.0.0",
|
|
16741
|
-
"fingerprint": "
|
|
16778
|
+
"fingerprint": "/P1ERhP+AKj4S9Pvf5/OQ+hLGUcS5iNPzBDZhUUSJCM="
|
|
16742
16779
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [6.4.0](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.3.2&sourceBranch=refs%2Ftags%2Fv6.4.0) (2024-08-02)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* Allow the configuration of the datadog log forwarder ([1a938d6](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/1a938d637f337e6f9e6811cb8dc06b3a6852399c))
|
|
11
|
+
* Allow the configuration of the datadog log forwarder ([031b00d](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/031b00d96b36840bd7789fae9847f7f1998afcf1))
|
|
12
|
+
* Allow the configuration of the datadog log forwarder ([301a9e7](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/301a9e783572476a403a79236d9589de6f71a208))
|
|
13
|
+
|
|
5
14
|
## [6.3.2](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.3.1&sourceBranch=refs%2Ftags%2Fv6.3.2) (2024-08-01)
|
|
6
15
|
|
|
7
16
|
## [6.3.1](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.3.0&sourceBranch=refs%2Ftags%2Fv6.3.1) (2024-08-01)
|
package/docs/API.md
CHANGED
|
@@ -737,6 +737,23 @@ The tree node.
|
|
|
737
737
|
|
|
738
738
|
---
|
|
739
739
|
|
|
740
|
+
#### Constants <a name="Constants" id="Constants"></a>
|
|
741
|
+
|
|
742
|
+
| **Name** | **Type** | **Description** |
|
|
743
|
+
| --- | --- | --- |
|
|
744
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.AwsEcsAbruptlyStoppedMonitor.property.DEFAULT_LOG_FORWARDER_ARN">DEFAULT_LOG_FORWARDER_ARN</a></code> | <code>string</code> | *No description.* |
|
|
745
|
+
|
|
746
|
+
---
|
|
747
|
+
|
|
748
|
+
##### `DEFAULT_LOG_FORWARDER_ARN`<sup>Required</sup> <a name="DEFAULT_LOG_FORWARDER_ARN" id="@rio-cloud/cdk-v2-constructs.AwsEcsAbruptlyStoppedMonitor.property.DEFAULT_LOG_FORWARDER_ARN"></a>
|
|
749
|
+
|
|
750
|
+
```typescript
|
|
751
|
+
public readonly DEFAULT_LOG_FORWARDER_ARN: string;
|
|
752
|
+
```
|
|
753
|
+
|
|
754
|
+
- *Type:* string
|
|
755
|
+
|
|
756
|
+
---
|
|
740
757
|
|
|
741
758
|
### Claidometer <a name="Claidometer" id="@rio-cloud/cdk-v2-constructs.Claidometer"></a>
|
|
742
759
|
|
|
@@ -9693,6 +9710,7 @@ const ecsAbruptlyStoppedMonitorProps: EcsAbruptlyStoppedMonitorProps = { ... }
|
|
|
9693
9710
|
| --- | --- | --- |
|
|
9694
9711
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps.property.serviceName">serviceName</a></code> | <code>string</code> | The name of the service to which the monitor belongs. |
|
|
9695
9712
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps.property.clusterArn">clusterArn</a></code> | <code>string</code> | ARN of the cluster that should be monitored, consuming only ECS events belonging to the cluster. |
|
|
9713
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps.property.datadogLogForwarderLambdaArn">datadogLogForwarderLambdaArn</a></code> | <code>string</code> | ARN of the Datadog forwarder Lambda function used to forward the CloudWatch logs to Datadog. |
|
|
9696
9714
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps.property.notification">notification</a></code> | <code>@rio-cloud/cdk-v2-constructs.datadogv2.INotification</code> | To explicitly disable notifications use {@link NoNotification }. |
|
|
9697
9715
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps.property.priority">priority</a></code> | <code>number</code> | The alert priority of the monitor. |
|
|
9698
9716
|
|
|
@@ -9726,6 +9744,23 @@ If no cluster is provided, the monitor will consume ECS events for all clusters
|
|
|
9726
9744
|
|
|
9727
9745
|
---
|
|
9728
9746
|
|
|
9747
|
+
##### `datadogLogForwarderLambdaArn`<sup>Optional</sup> <a name="datadogLogForwarderLambdaArn" id="@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps.property.datadogLogForwarderLambdaArn"></a>
|
|
9748
|
+
|
|
9749
|
+
```typescript
|
|
9750
|
+
public readonly datadogLogForwarderLambdaArn: string;
|
|
9751
|
+
```
|
|
9752
|
+
|
|
9753
|
+
- *Type:* string
|
|
9754
|
+
- *Default:* {@link AwsEcsAbruptlyStoppedMonitor.DEFAULT_LOG_FORWARDER_ARN }
|
|
9755
|
+
|
|
9756
|
+
ARN of the Datadog forwarder Lambda function used to forward the CloudWatch logs to Datadog.
|
|
9757
|
+
|
|
9758
|
+
Currently, two values are know to be exported by the account modules:
|
|
9759
|
+
* datadog-forwarder-ForwarderArn: exported by the 3rd party account modules [Datadog-forwarder](https://github.com/DataDog/datadog-serverless-functions/releases)
|
|
9760
|
+
* custom-resource-datadog-logforwarder-function-arn: exported by the deprecated custom account module [datadog-integration](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/datadog-integration/browse).
|
|
9761
|
+
|
|
9762
|
+
---
|
|
9763
|
+
|
|
9729
9764
|
##### `notification`<sup>Optional</sup> <a name="notification" id="@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps.property.notification"></a>
|
|
9730
9765
|
|
|
9731
9766
|
```typescript
|
|
@@ -26,6 +26,15 @@ export interface EcsAbruptlyStoppedMonitorProps {
|
|
|
26
26
|
* If no cluster is provided, the monitor will consume ECS events for all clusters within the account.
|
|
27
27
|
*/
|
|
28
28
|
readonly clusterArn?: string;
|
|
29
|
+
/**
|
|
30
|
+
* ARN of the Datadog forwarder Lambda function used to forward the CloudWatch logs to Datadog.
|
|
31
|
+
* Currently, two values are know to be exported by the account modules:
|
|
32
|
+
* * datadog-forwarder-ForwarderArn: exported by the 3rd party account modules [Datadog-forwarder](https://github.com/DataDog/datadog-serverless-functions/releases)
|
|
33
|
+
* * custom-resource-datadog-logforwarder-function-arn: exported by the deprecated custom account module [datadog-integration](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/datadog-integration/browse).
|
|
34
|
+
*
|
|
35
|
+
* @defaultValue {@link AwsEcsAbruptlyStoppedMonitor.DEFAULT_LOG_FORWARDER_ARN}
|
|
36
|
+
*/
|
|
37
|
+
readonly datadogLogForwarderLambdaArn?: string;
|
|
29
38
|
}
|
|
30
39
|
/**
|
|
31
40
|
* # WARNING: This construct is still in the beta phase.
|
|
@@ -49,5 +58,6 @@ export interface EcsAbruptlyStoppedMonitorProps {
|
|
|
49
58
|
* {@link https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwe_events.html}.
|
|
50
59
|
*/
|
|
51
60
|
export declare class AwsEcsAbruptlyStoppedMonitor extends Construct {
|
|
61
|
+
static readonly DEFAULT_LOG_FORWARDER_ARN = "datadog-forwarder-ForwarderArn";
|
|
52
62
|
constructor(scope: Construct, id: string, props: EcsAbruptlyStoppedMonitorProps);
|
|
53
63
|
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.AwsEcsAbruptlyStoppedMonitor = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const cdk = require("aws-cdk-lib");
|
|
8
|
+
const constructs_1 = require("constructs");
|
|
9
|
+
const datadogv2_1 = require("../../../datadogv2");
|
|
10
|
+
const rio_claidometer_1 = require("../../../rio-claidometer");
|
|
11
|
+
/**
|
|
12
|
+
* # WARNING: This construct is still in the beta phase.
|
|
13
|
+
*
|
|
14
|
+
* The construct creates monitoring for detecting ECS containers that were stopped abruptly by AWS for reasons such as,
|
|
15
|
+
* out of memory, or failed health checks.
|
|
16
|
+
*
|
|
17
|
+
* This monitor adds transparency to such cases, which otherwise would happen without being noticed and could escalate
|
|
18
|
+
* to bigger issues, like a service that requires more resources to run properly.
|
|
19
|
+
*
|
|
20
|
+
* The construct will consume the ECS events and send them to a CloudWatch log group, which are forwarded to Datadog,
|
|
21
|
+
* allowing better analyses since AWS keeps the stopped task details for only one hour and will be used to create a
|
|
22
|
+
* monitor.
|
|
23
|
+
*
|
|
24
|
+
* Contributions are more than welcome, please get in touch with Team Outbound to ensure compatibility.
|
|
25
|
+
*
|
|
26
|
+
* This construct was based on an AWS blog post about ECS anomaly detection, see here:
|
|
27
|
+
* {@link https://aws.amazon.com/blogs/containers/amazon-elastic-container-service-anomaly-detection-using-amazon-eventbridge/}.
|
|
28
|
+
*
|
|
29
|
+
* More details on the AWS ECS events can be found here:
|
|
30
|
+
* {@link https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwe_events.html}.
|
|
31
|
+
*/
|
|
32
|
+
class AwsEcsAbruptlyStoppedMonitor extends constructs_1.Construct {
|
|
33
|
+
constructor(scope, id, props) {
|
|
34
|
+
super(scope, id);
|
|
35
|
+
const ecsStateChangeLogGroup = new cdk.aws_logs.LogGroup(this, 'EcsStateChangeLogGroup');
|
|
36
|
+
new cdk.aws_logs.LogRetention(this, 'EcsStateChangeLogRetention', {
|
|
37
|
+
logGroupName: ecsStateChangeLogGroup.logGroupName,
|
|
38
|
+
retention: 3,
|
|
39
|
+
});
|
|
40
|
+
// Rule to cover all clusters status changes
|
|
41
|
+
new cdk.aws_events.Rule(this, 'EcsStateChangeRule', {
|
|
42
|
+
eventPattern: {
|
|
43
|
+
source: ['aws.ecs'],
|
|
44
|
+
detailType: ['ECS Task State Change', 'ECS Container Instance State Change', 'ECS Service Action'],
|
|
45
|
+
detail: {
|
|
46
|
+
desiredStatus: ['STOPPED'],
|
|
47
|
+
lastStatus: ['STOPPED'],
|
|
48
|
+
...(props.clusterArn && { clusterArn: [props.clusterArn] }),
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
targets: [new cdk.aws_events_targets.CloudWatchLogGroup(ecsStateChangeLogGroup)],
|
|
52
|
+
});
|
|
53
|
+
const logForwarderLambda = cdk.aws_lambda.Function.fromFunctionAttributes(this, 'EcsStateChangeLogForwarderLambda', {
|
|
54
|
+
functionArn: cdk.Fn.importValue(props.datadogLogForwarderLambdaArn ?? AwsEcsAbruptlyStoppedMonitor.DEFAULT_LOG_FORWARDER_ARN),
|
|
55
|
+
sameEnvironment: true,
|
|
56
|
+
});
|
|
57
|
+
new cdk.aws_logs.SubscriptionFilter(this, 'EcsStateChangeLogFilter', {
|
|
58
|
+
destination: new cdk.aws_logs_destinations.LambdaDestination(logForwarderLambda),
|
|
59
|
+
filterPattern: cdk.aws_logs.FilterPattern.anyTerm('Container killed due to', 'Task failed container health checks'),
|
|
60
|
+
logGroup: ecsStateChangeLogGroup,
|
|
61
|
+
});
|
|
62
|
+
// After being migrated to the new version it can be added to the CLAID construct repository
|
|
63
|
+
new datadogv2_1.DatadogMonitor(this, 'EcsStateChangeLogGroupMonitor', {
|
|
64
|
+
name: 'Unexpected ECS status changes',
|
|
65
|
+
serviceName: props.serviceName,
|
|
66
|
+
monitorType: datadogv2_1.DatadogMonitorQueryAlertType.LOG_ALERT,
|
|
67
|
+
query: `logs("account_id:${cdk.Stack.of(this).account} @aws.awslogs.logGroup:\"${ecsStateChangeLogGroup.logGroupName}\"").index("*").rollup("count").last("5m") >= 1`,
|
|
68
|
+
message: '{{#is_alert}}There are unexpected ECS status changes in the account ' +
|
|
69
|
+
'{{log.tags.account_id}}, more details here {{log.link}} {{/is_alert}}',
|
|
70
|
+
priority: props.priority ?? datadogv2_1.DatadogMonitor.DEFAULT_PRIORITY,
|
|
71
|
+
notification: props.notification,
|
|
72
|
+
});
|
|
73
|
+
addClaidometer(this);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.AwsEcsAbruptlyStoppedMonitor = AwsEcsAbruptlyStoppedMonitor;
|
|
77
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
78
|
+
AwsEcsAbruptlyStoppedMonitor[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.AwsEcsAbruptlyStoppedMonitor", version: "0.0.0" };
|
|
79
|
+
AwsEcsAbruptlyStoppedMonitor.DEFAULT_LOG_FORWARDER_ARN = 'datadog-forwarder-ForwarderArn';
|
|
80
|
+
function addClaidometer(scope) {
|
|
81
|
+
const [feature, packageName] = __dirname.split(path.sep).reverse();
|
|
82
|
+
new rio_claidometer_1.Claidometer(scope, 'Claidometer', {
|
|
83
|
+
product: rio_claidometer_1.ClaidometerProduct.CDK_CONTRIBUTION,
|
|
84
|
+
packageName,
|
|
85
|
+
feature,
|
|
86
|
+
version: '0.0.3',
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1hYnJ1cHRseS1zdG9wcGVkLW1vbml0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLW91dGJvdW5kLW9yZGVyLWJvb2svYXdzLWVjcy1hYnJ1cHRseS1zdG9wcGVkLW1vbml0b3IvYXdzLWVjcy1hYnJ1cHRseS1zdG9wcGVkLW1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsbUNBQW1DO0FBQ25DLDJDQUF1QztBQUV2QyxrREFBaUc7QUFDakcsOERBQTJFO0FBOEMzRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFhLDRCQUE2QixTQUFRLHNCQUFTO0lBSXpELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLHNCQUFzQixHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFFekYsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsNEJBQTRCLEVBQUU7WUFDaEUsWUFBWSxFQUFFLHNCQUFzQixDQUFDLFlBQVk7WUFDakQsU0FBUyxFQUFFLENBQUM7U0FDYixDQUFDLENBQUM7UUFFSCw0Q0FBNEM7UUFDNUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDbEQsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsVUFBVSxFQUFFLENBQUMsdUJBQXVCLEVBQUUscUNBQXFDLEVBQUUsb0JBQW9CLENBQUM7Z0JBQ2xHLE1BQU0sRUFBRTtvQkFDTixhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQzFCLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQztvQkFDdkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztpQkFDNUQ7YUFDRjtZQUNELE9BQU8sRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDakYsQ0FBQyxDQUFDO1FBRUgsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FDdkUsSUFBSSxFQUNKLGtDQUFrQyxFQUNsQztZQUNFLFdBQVcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLElBQUksNEJBQTRCLENBQUMseUJBQXlCLENBQUM7WUFDN0gsZUFBZSxFQUFFLElBQUk7U0FDdEIsQ0FDRixDQUFDO1FBRUYsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRTtZQUNuRSxXQUFXLEVBQUUsSUFBSSxHQUFHLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUM7WUFDaEYsYUFBYSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FDL0MseUJBQXlCLEVBQ3pCLHFDQUFxQyxDQUN0QztZQUNELFFBQVEsRUFBRSxzQkFBc0I7U0FDakMsQ0FBQyxDQUFDO1FBRUgsNEZBQTRGO1FBQzVGLElBQUksMEJBQWMsQ0FBQyxJQUFJLEVBQUUsK0JBQStCLEVBQUU7WUFDeEQsSUFBSSxFQUFFLCtCQUErQjtZQUNyQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsV0FBVyxFQUFFLHdDQUE0QixDQUFDLFNBQVM7WUFDbkQsS0FBSyxFQUFFLG9CQUFvQixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLDRCQUNuRCxzQkFBc0IsQ0FBQyxZQUN6QixpREFBaUQ7WUFDakQsT0FBTyxFQUFFLHNFQUFzRTtnQkFDckUsdUVBQXVFO1lBQ2pGLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLDBCQUFjLENBQUMsZ0JBQWdCO1lBQzNELFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtTQUNqQyxDQUFDLENBQUM7UUFFSCxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7QUE3REgsb0VBOERDOzs7QUE1RGlCLHNEQUF5QixHQUFHLGdDQUFnQyxDQUFDO0FBOEQvRSxTQUFTLGNBQWMsQ0FBQyxLQUEyQjtJQUNqRCxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25FLElBQUksNkJBQVcsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFO1FBQ3BDLE9BQU8sRUFBRSxvQ0FBa0IsQ0FBQyxnQkFBZ0I7UUFDNUMsV0FBVztRQUNYLE9BQU87UUFDUCxPQUFPLEVBQUUsT0FBTztLQUNqQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBEYXRhZG9nTW9uaXRvciwgRGF0YWRvZ01vbml0b3JRdWVyeUFsZXJ0VHlwZSwgSU5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2d2Mic7XG5pbXBvcnQgeyBDbGFpZG9tZXRlciwgQ2xhaWRvbWV0ZXJQcm9kdWN0IH0gZnJvbSAnLi4vLi4vLi4vcmlvLWNsYWlkb21ldGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBFY3NBYnJ1cHRseVN0b3BwZWRNb25pdG9yUHJvcHMge1xuXG4gIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIHRvIHdoaWNoIHRoZSBtb25pdG9yIGJlbG9uZ3MuXG4gICAgICpcbiAgICAgKiBVc2VkIHRvIGdlbmVyYXRlIHRoZSBtb25pdG9yIG5hbWUgYXMgd2VsbCBhIGFwcGx5IHRoZSBgc2VydmljZWAgdGFnLlxuICAgICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgICAqIFRvIGV4cGxpY2l0bHkgZGlzYWJsZSBub3RpZmljYXRpb25zIHVzZSB7QGxpbmsgTm9Ob3RpZmljYXRpb259LlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSB7QGxpbmsgRGVmYXVsdFNsYWNrTm90aWZpY2F0aW9ufVxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9tb25pdG9ycy9ub3RpZnlcbiAgICAgKi9cblxuICByZWFkb25seSBub3RpZmljYXRpb24/OiBJTm90aWZpY2F0aW9uO1xuXG4gIC8qKlxuICAgICAqIFRoZSBhbGVydCBwcmlvcml0eSBvZiB0aGUgbW9uaXRvclxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSB7QGxpbmsgRGF0YWRvZ01vbml0b3IuREVGQVVMVF9QUklPUklUWX1cbiAgICAgKi9cblxuICByZWFkb25seSBwcmlvcml0eT86IG51bWJlcjtcblxuICAvKipcbiAgICAgKiBBUk4gb2YgdGhlIGNsdXN0ZXIgdGhhdCBzaG91bGQgYmUgbW9uaXRvcmVkLCBjb25zdW1pbmcgb25seSBFQ1MgZXZlbnRzIGJlbG9uZ2luZyB0byB0aGUgY2x1c3Rlci5cbiAgICAgKiBJZiBubyBjbHVzdGVyIGlzIHByb3ZpZGVkLCB0aGUgbW9uaXRvciB3aWxsIGNvbnN1bWUgRUNTIGV2ZW50cyBmb3IgYWxsIGNsdXN0ZXJzIHdpdGhpbiB0aGUgYWNjb3VudC5cbiAgICAgKi9cbiAgcmVhZG9ubHkgY2x1c3RlckFybj86IHN0cmluZztcblxuICAvKipcbiAgICAgKiBBUk4gb2YgdGhlIERhdGFkb2cgZm9yd2FyZGVyIExhbWJkYSBmdW5jdGlvbiB1c2VkIHRvIGZvcndhcmQgdGhlIENsb3VkV2F0Y2ggbG9ncyB0byBEYXRhZG9nLlxuICAgICAqIEN1cnJlbnRseSwgdHdvIHZhbHVlcyBhcmUga25vdyB0byBiZSBleHBvcnRlZCBieSB0aGUgYWNjb3VudCBtb2R1bGVzOlxuICAgICAqICogZGF0YWRvZy1mb3J3YXJkZXItRm9yd2FyZGVyQXJuOiBleHBvcnRlZCBieSB0aGUgM3JkIHBhcnR5IGFjY291bnQgbW9kdWxlcyBbRGF0YWRvZy1mb3J3YXJkZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9EYXRhRG9nL2RhdGFkb2ctc2VydmVybGVzcy1mdW5jdGlvbnMvcmVsZWFzZXMpXG4gICAgICogKiBjdXN0b20tcmVzb3VyY2UtZGF0YWRvZy1sb2dmb3J3YXJkZXItZnVuY3Rpb24tYXJuOiBleHBvcnRlZCBieSB0aGUgZGVwcmVjYXRlZCBjdXN0b20gYWNjb3VudCBtb2R1bGUgW2RhdGFkb2ctaW50ZWdyYXRpb25dKGh0dHBzOi8vYml0YnVja2V0LmNvbGxhYm9yYXRpb24tbWFuLmNvbS9wcm9qZWN0cy9SSU9ERVYvcmVwb3MvZGF0YWRvZy1pbnRlZ3JhdGlvbi9icm93c2UpLlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSB7QGxpbmsgQXdzRWNzQWJydXB0bHlTdG9wcGVkTW9uaXRvci5ERUZBVUxUX0xPR19GT1JXQVJERVJfQVJOfVxuICAgICAqL1xuICByZWFkb25seSBkYXRhZG9nTG9nRm9yd2FyZGVyTGFtYmRhQXJuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqICMgV0FSTklORzogVGhpcyBjb25zdHJ1Y3QgaXMgc3RpbGwgaW4gdGhlIGJldGEgcGhhc2UuXG4gKlxuICogVGhlIGNvbnN0cnVjdCBjcmVhdGVzIG1vbml0b3JpbmcgZm9yIGRldGVjdGluZyBFQ1MgY29udGFpbmVycyB0aGF0IHdlcmUgc3RvcHBlZCBhYnJ1cHRseSBieSBBV1MgZm9yIHJlYXNvbnMgc3VjaCBhcyxcbiAqIG91dCBvZiBtZW1vcnksIG9yIGZhaWxlZCBoZWFsdGggY2hlY2tzLlxuICpcbiAqIFRoaXMgbW9uaXRvciBhZGRzIHRyYW5zcGFyZW5jeSB0byBzdWNoIGNhc2VzLCB3aGljaCBvdGhlcndpc2Ugd291bGQgaGFwcGVuIHdpdGhvdXQgYmVpbmcgbm90aWNlZCBhbmQgY291bGQgZXNjYWxhdGVcbiAqIHRvIGJpZ2dlciBpc3N1ZXMsIGxpa2UgYSBzZXJ2aWNlIHRoYXQgcmVxdWlyZXMgbW9yZSByZXNvdXJjZXMgdG8gcnVuIHByb3Blcmx5LlxuICpcbiAqIFRoZSBjb25zdHJ1Y3Qgd2lsbCBjb25zdW1lIHRoZSBFQ1MgZXZlbnRzIGFuZCBzZW5kIHRoZW0gdG8gYSBDbG91ZFdhdGNoIGxvZyBncm91cCwgd2hpY2ggYXJlIGZvcndhcmRlZCB0byBEYXRhZG9nLFxuICogYWxsb3dpbmcgYmV0dGVyIGFuYWx5c2VzIHNpbmNlIEFXUyBrZWVwcyB0aGUgc3RvcHBlZCB0YXNrIGRldGFpbHMgZm9yIG9ubHkgb25lIGhvdXIgYW5kIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgYVxuICogbW9uaXRvci5cbiAqXG4gKiBDb250cmlidXRpb25zIGFyZSBtb3JlIHRoYW4gd2VsY29tZSwgcGxlYXNlIGdldCBpbiB0b3VjaCB3aXRoIFRlYW0gT3V0Ym91bmQgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkuXG4gKlxuICogVGhpcyBjb25zdHJ1Y3Qgd2FzIGJhc2VkIG9uIGFuIEFXUyBibG9nIHBvc3QgYWJvdXQgRUNTIGFub21hbHkgZGV0ZWN0aW9uLCBzZWUgaGVyZTpcbiAqIHtAbGluayBodHRwczovL2F3cy5hbWF6b24uY29tL2Jsb2dzL2NvbnRhaW5lcnMvYW1hem9uLWVsYXN0aWMtY29udGFpbmVyLXNlcnZpY2UtYW5vbWFseS1kZXRlY3Rpb24tdXNpbmctYW1hem9uLWV2ZW50YnJpZGdlL30uXG4gKlxuICogTW9yZSBkZXRhaWxzIG9uIHRoZSBBV1MgRUNTIGV2ZW50cyBjYW4gYmUgZm91bmQgaGVyZTpcbiAqIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3NfY3dlX2V2ZW50cy5odG1sfS5cbiAqL1xuZXhwb3J0IGNsYXNzIEF3c0Vjc0FicnVwdGx5U3RvcHBlZE1vbml0b3IgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0xPR19GT1JXQVJERVJfQVJOID0gJ2RhdGFkb2ctZm9yd2FyZGVyLUZvcndhcmRlckFybic7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEVjc0FicnVwdGx5U3RvcHBlZE1vbml0b3JQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBlY3NTdGF0ZUNoYW5nZUxvZ0dyb3VwID0gbmV3IGNkay5hd3NfbG9ncy5Mb2dHcm91cCh0aGlzLCAnRWNzU3RhdGVDaGFuZ2VMb2dHcm91cCcpO1xuXG4gICAgbmV3IGNkay5hd3NfbG9ncy5Mb2dSZXRlbnRpb24odGhpcywgJ0Vjc1N0YXRlQ2hhbmdlTG9nUmV0ZW50aW9uJywge1xuICAgICAgbG9nR3JvdXBOYW1lOiBlY3NTdGF0ZUNoYW5nZUxvZ0dyb3VwLmxvZ0dyb3VwTmFtZSxcbiAgICAgIHJldGVudGlvbjogMyxcbiAgICB9KTtcblxuICAgIC8vIFJ1bGUgdG8gY292ZXIgYWxsIGNsdXN0ZXJzIHN0YXR1cyBjaGFuZ2VzXG4gICAgbmV3IGNkay5hd3NfZXZlbnRzLlJ1bGUodGhpcywgJ0Vjc1N0YXRlQ2hhbmdlUnVsZScsIHtcbiAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICBzb3VyY2U6IFsnYXdzLmVjcyddLFxuICAgICAgICBkZXRhaWxUeXBlOiBbJ0VDUyBUYXNrIFN0YXRlIENoYW5nZScsICdFQ1MgQ29udGFpbmVyIEluc3RhbmNlIFN0YXRlIENoYW5nZScsICdFQ1MgU2VydmljZSBBY3Rpb24nXSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgZGVzaXJlZFN0YXR1czogWydTVE9QUEVEJ10sXG4gICAgICAgICAgbGFzdFN0YXR1czogWydTVE9QUEVEJ10sXG4gICAgICAgICAgLi4uKHByb3BzLmNsdXN0ZXJBcm4gJiYgeyBjbHVzdGVyQXJuOiBbcHJvcHMuY2x1c3RlckFybl0gfSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdGFyZ2V0czogW25ldyBjZGsuYXdzX2V2ZW50c190YXJnZXRzLkNsb3VkV2F0Y2hMb2dHcm91cChlY3NTdGF0ZUNoYW5nZUxvZ0dyb3VwKV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBsb2dGb3J3YXJkZXJMYW1iZGEgPSBjZGsuYXdzX2xhbWJkYS5GdW5jdGlvbi5mcm9tRnVuY3Rpb25BdHRyaWJ1dGVzKFxuICAgICAgdGhpcyxcbiAgICAgICdFY3NTdGF0ZUNoYW5nZUxvZ0ZvcndhcmRlckxhbWJkYScsXG4gICAgICB7XG4gICAgICAgIGZ1bmN0aW9uQXJuOiBjZGsuRm4uaW1wb3J0VmFsdWUocHJvcHMuZGF0YWRvZ0xvZ0ZvcndhcmRlckxhbWJkYUFybiA/PyBBd3NFY3NBYnJ1cHRseVN0b3BwZWRNb25pdG9yLkRFRkFVTFRfTE9HX0ZPUldBUkRFUl9BUk4pLFxuICAgICAgICBzYW1lRW52aXJvbm1lbnQ6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBuZXcgY2RrLmF3c19sb2dzLlN1YnNjcmlwdGlvbkZpbHRlcih0aGlzLCAnRWNzU3RhdGVDaGFuZ2VMb2dGaWx0ZXInLCB7XG4gICAgICBkZXN0aW5hdGlvbjogbmV3IGNkay5hd3NfbG9nc19kZXN0aW5hdGlvbnMuTGFtYmRhRGVzdGluYXRpb24obG9nRm9yd2FyZGVyTGFtYmRhKSxcbiAgICAgIGZpbHRlclBhdHRlcm46IGNkay5hd3NfbG9ncy5GaWx0ZXJQYXR0ZXJuLmFueVRlcm0oXG4gICAgICAgICdDb250YWluZXIga2lsbGVkIGR1ZSB0bycsXG4gICAgICAgICdUYXNrIGZhaWxlZCBjb250YWluZXIgaGVhbHRoIGNoZWNrcycsXG4gICAgICApLFxuICAgICAgbG9nR3JvdXA6IGVjc1N0YXRlQ2hhbmdlTG9nR3JvdXAsXG4gICAgfSk7XG5cbiAgICAvLyBBZnRlciBiZWluZyBtaWdyYXRlZCB0byB0aGUgbmV3IHZlcnNpb24gaXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBDTEFJRCBjb25zdHJ1Y3QgcmVwb3NpdG9yeVxuICAgIG5ldyBEYXRhZG9nTW9uaXRvcih0aGlzLCAnRWNzU3RhdGVDaGFuZ2VMb2dHcm91cE1vbml0b3InLCB7XG4gICAgICBuYW1lOiAnVW5leHBlY3RlZCBFQ1Mgc3RhdHVzIGNoYW5nZXMnLFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgbW9uaXRvclR5cGU6IERhdGFkb2dNb25pdG9yUXVlcnlBbGVydFR5cGUuTE9HX0FMRVJULFxuICAgICAgcXVlcnk6IGBsb2dzKFwiYWNjb3VudF9pZDoke2Nkay5TdGFjay5vZih0aGlzKS5hY2NvdW50fSBAYXdzLmF3c2xvZ3MubG9nR3JvdXA6XFxcIiR7XG4gICAgICAgIGVjc1N0YXRlQ2hhbmdlTG9nR3JvdXAubG9nR3JvdXBOYW1lXG4gICAgICB9XFxcIlwiKS5pbmRleChcIipcIikucm9sbHVwKFwiY291bnRcIikubGFzdChcIjVtXCIpID49IDFgLFxuICAgICAgbWVzc2FnZTogJ3t7I2lzX2FsZXJ0fX1UaGVyZSBhcmUgdW5leHBlY3RlZCBFQ1Mgc3RhdHVzIGNoYW5nZXMgaW4gdGhlIGFjY291bnQgJyArXG4gICAgICAgICAgICAgICAgJ3t7bG9nLnRhZ3MuYWNjb3VudF9pZH19LCBtb3JlIGRldGFpbHMgaGVyZSB7e2xvZy5saW5rfX0ge3svaXNfYWxlcnR9fScsXG4gICAgICBwcmlvcml0eTogcHJvcHMucHJpb3JpdHkgPz8gRGF0YWRvZ01vbml0b3IuREVGQVVMVF9QUklPUklUWSxcbiAgICAgIG5vdGlmaWNhdGlvbjogcHJvcHMubm90aWZpY2F0aW9uLFxuICAgIH0pO1xuXG4gICAgYWRkQ2xhaWRvbWV0ZXIodGhpcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQ2xhaWRvbWV0ZXIoc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0KSB7XG4gIGNvbnN0IFtmZWF0dXJlLCBwYWNrYWdlTmFtZV0gPSBfX2Rpcm5hbWUuc3BsaXQocGF0aC5zZXApLnJldmVyc2UoKTtcbiAgbmV3IENsYWlkb21ldGVyKHNjb3BlLCAnQ2xhaWRvbWV0ZXInLCB7XG4gICAgcHJvZHVjdDogQ2xhaWRvbWV0ZXJQcm9kdWN0LkNES19DT05UUklCVVRJT04sXG4gICAgcGFja2FnZU5hbWUsXG4gICAgZmVhdHVyZSxcbiAgICB2ZXJzaW9uOiAnMC4wLjMnLFxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -15,4 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./aws-ecs-abruptly-stopped-monitor"), exports);
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLW91dGJvdW5kLW9yZGVyLWJvb2svYXdzLWVjcy1hYnJ1cHRseS1zdG9wcGVkLW1vbml0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFFQUFtRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXdzLWVjcy1hYnJ1cHRseS1zdG9wcGVkLW1vbml0b3InO1xuIl19
|
package/lib/index.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export * from './contributions/team-transport-two/datadog';
|
|
|
18
18
|
export * from './contributions/team-transport-two/pipeline';
|
|
19
19
|
export * from './contributions/team-claid/aws-backup-monitoring';
|
|
20
20
|
export * from './contributions/team-claid/datadog-usage-monitoring';
|
|
21
|
-
export * from './contributions/team-
|
|
21
|
+
export * from './contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor';
|
|
22
22
|
export * from './backup';
|
|
23
23
|
export * as backup from './backup';
|
|
24
24
|
export * from './contributions/smart-route/gitlab-runner';
|
package/lib/index.js
CHANGED
|
@@ -35,8 +35,8 @@ __exportStar(require("./contributions/team-transport-two/datadog"), exports);
|
|
|
35
35
|
__exportStar(require("./contributions/team-transport-two/pipeline"), exports);
|
|
36
36
|
__exportStar(require("./contributions/team-claid/aws-backup-monitoring"), exports);
|
|
37
37
|
__exportStar(require("./contributions/team-claid/datadog-usage-monitoring"), exports);
|
|
38
|
-
__exportStar(require("./contributions/team-
|
|
38
|
+
__exportStar(require("./contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor"), exports);
|
|
39
39
|
__exportStar(require("./backup"), exports);
|
|
40
40
|
exports.backup = require("./backup");
|
|
41
41
|
__exportStar(require("./contributions/smart-route/gitlab-runner"), exports);
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBMkI7QUFFM0IsNkNBQTJDO0FBRTNDLHFEQUFtQztBQUNuQyxzREFBb0M7QUFDcEMsb0RBQWtDO0FBRWxDLGdFQUE4QztBQUM5Qyx1Q0FBcUM7QUFFckMseUVBQXVEO0FBQ3ZELDhFQUE0RDtBQUM1RCwrREFBNkM7QUFFN0MsMENBQXdCO0FBQ3hCLG1DQUFpQztBQUVqQyw0Q0FBMEI7QUFDMUIsdUNBQXFDO0FBQ3JDLDJDQUF5QztBQUV6QywwRUFBd0Q7QUFFeEQsNkVBQTJEO0FBQzNELDhFQUE0RDtBQUU1RCxtRkFBaUU7QUFDakUsc0ZBQW9FO0FBRXBFLDRHQUEwRjtBQUUxRiwyQ0FBeUI7QUFDekIscUNBQW1DO0FBRW5DLDRFQUEwRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vd2F0Y2hmdWwnO1xuXG5leHBvcnQgKiBhcyB3YXRjaGZ1bHYyIGZyb20gJy4vd2F0Y2hmdWx2Mic7XG5cbmV4cG9ydCAqIGZyb20gJy4vcmlvLWxhbmRpbmctem9uZSc7XG5leHBvcnQgKiBmcm9tICcuL3Jpby1sb2FkLWJhbGFuY2VyJztcbmV4cG9ydCAqIGZyb20gJy4vcmlvLWNsYWlkb21ldGVyJztcblxuZXhwb3J0ICogZnJvbSAnLi9mYXJnYXRlL3Jpby1mYXJnYXRlLXNlcnZpY2UnO1xuZXhwb3J0ICogYXMgZmFyZ2F0ZSBmcm9tICcuL2ZhcmdhdGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lL3Jpby1iaXRidWNrZXQtc291cmNlLWFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lL3Jpby1iYWNrdXAtc2VjcmV0cy1yZXN0b3JlLXN0YWdlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUvcmlvLXBpcGVsaW5lLXR5cGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2thZmthJztcbmV4cG9ydCAqIGFzIGthZmthIGZyb20gJy4va2Fma2EnO1xuXG5leHBvcnQgKiBmcm9tICcuL2RhdGFkb2cnO1xuZXhwb3J0ICogYXMgZGF0YWRvZyBmcm9tICcuL2RhdGFkb2cnO1xuZXhwb3J0ICogYXMgZGF0YWRvZ3YyIGZyb20gJy4vZGF0YWRvZ3YyJztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL2NvcC1mcm9udGVuZC9jbG91ZGZyb250JztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9kYXRhZG9nJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvbnRyaWJ1dGlvbnMvdGVhbS1jbGFpZC9hd3MtYmFja3VwLW1vbml0b3JpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tY2xhaWQvZGF0YWRvZy11c2FnZS1tb25pdG9yaW5nJztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tb3V0Ym91bmQtb3JkZXItYm9vay9hd3MtZWNzLWFicnVwdGx5LXN0b3BwZWQtbW9uaXRvcic7XG5cbmV4cG9ydCAqIGZyb20gJy4vYmFja3VwJztcbmV4cG9ydCAqIGFzIGJhY2t1cCBmcm9tICcuL2JhY2t1cCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vY29udHJpYnV0aW9ucy9zbWFydC1yb3V0ZS9naXRsYWItcnVubmVyJztcbiJdfQ==
|
package/package.json
CHANGED
package/version.json
CHANGED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var _a;
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.AwsEcsAbruptlyStoppedMonitor = void 0;
|
|
5
|
-
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
-
const cdk = require("aws-cdk-lib");
|
|
7
|
-
const constructs_1 = require("constructs");
|
|
8
|
-
const datadogv2_1 = require("../../../datadogv2");
|
|
9
|
-
/**
|
|
10
|
-
* # WARNING: This construct is still in the beta phase.
|
|
11
|
-
*
|
|
12
|
-
* The construct creates monitoring for detecting ECS containers that were stopped abruptly by AWS for reasons such as,
|
|
13
|
-
* out of memory, or failed health checks.
|
|
14
|
-
*
|
|
15
|
-
* This monitor adds transparency to such cases, which otherwise would happen without being noticed and could escalate
|
|
16
|
-
* to bigger issues, like a service that requires more resources to run properly.
|
|
17
|
-
*
|
|
18
|
-
* The construct will consume the ECS events and send them to a CloudWatch log group, which are forwarded to Datadog,
|
|
19
|
-
* allowing better analyses since AWS keeps the stopped task details for only one hour and will be used to create a
|
|
20
|
-
* monitor.
|
|
21
|
-
*
|
|
22
|
-
* Contributions are more than welcome, please get in touch with Team Outbound to ensure compatibility.
|
|
23
|
-
*
|
|
24
|
-
* This construct was based on an AWS blog post about ECS anomaly detection, see here:
|
|
25
|
-
* {@link https://aws.amazon.com/blogs/containers/amazon-elastic-container-service-anomaly-detection-using-amazon-eventbridge/}.
|
|
26
|
-
*
|
|
27
|
-
* More details on the AWS ECS events can be found here:
|
|
28
|
-
* {@link https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwe_events.html}.
|
|
29
|
-
*/
|
|
30
|
-
class AwsEcsAbruptlyStoppedMonitor extends constructs_1.Construct {
|
|
31
|
-
constructor(scope, id, props) {
|
|
32
|
-
super(scope, id);
|
|
33
|
-
const ecsStateChangeLogGroup = new cdk.aws_logs.LogGroup(this, 'EcsStateChangeLogGroup');
|
|
34
|
-
new cdk.aws_logs.LogRetention(this, 'EcsStateChangeLogRetention', {
|
|
35
|
-
logGroupName: ecsStateChangeLogGroup.logGroupName,
|
|
36
|
-
retention: 3,
|
|
37
|
-
});
|
|
38
|
-
// Rule to cover all clusters status changes
|
|
39
|
-
new cdk.aws_events.Rule(this, 'EcsStateChangeRule', {
|
|
40
|
-
eventPattern: {
|
|
41
|
-
source: ['aws.ecs'],
|
|
42
|
-
detailType: ['ECS Task State Change', 'ECS Container Instance State Change', 'ECS Service Action'],
|
|
43
|
-
detail: {
|
|
44
|
-
desiredStatus: ['STOPPED'],
|
|
45
|
-
lastStatus: ['STOPPED'],
|
|
46
|
-
...(props.clusterArn && { clusterArn: [props.clusterArn] }),
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
targets: [new cdk.aws_events_targets.CloudWatchLogGroup(ecsStateChangeLogGroup)],
|
|
50
|
-
});
|
|
51
|
-
const logForwarderLambda = cdk.aws_lambda.Function.fromFunctionAttributes(this, 'EcsStateChangeLogForwarderLambda', {
|
|
52
|
-
functionArn: cdk.Fn.importValue('datadog-forwarder-ForwarderArn'),
|
|
53
|
-
sameEnvironment: true,
|
|
54
|
-
});
|
|
55
|
-
new cdk.aws_logs.SubscriptionFilter(this, 'EcsStateChangeLogFilter', {
|
|
56
|
-
destination: new cdk.aws_logs_destinations.LambdaDestination(logForwarderLambda),
|
|
57
|
-
filterPattern: cdk.aws_logs.FilterPattern.anyTerm('Container killed due to', 'Task failed container health checks'),
|
|
58
|
-
logGroup: ecsStateChangeLogGroup,
|
|
59
|
-
});
|
|
60
|
-
// After being migrated to the new version it can be added to the CLAID construct repository
|
|
61
|
-
new datadogv2_1.DatadogMonitor(this, 'EcsStateChangeLogGroupMonitor', {
|
|
62
|
-
name: 'Unexpected ECS status changes',
|
|
63
|
-
serviceName: props.serviceName,
|
|
64
|
-
monitorType: datadogv2_1.DatadogMonitorQueryAlertType.LOG_ALERT,
|
|
65
|
-
query: `logs("account_id:${cdk.Stack.of(this).account} @aws.awslogs.logGroup:\"${ecsStateChangeLogGroup.logGroupName}\"").index("*").rollup("count").last("5m") >= 1`,
|
|
66
|
-
message: '{{#is_alert}}There are unexpected ECS status changes in the account ' +
|
|
67
|
-
'{{log.tags.account_id}}, more details here {{log.link}} {{/is_alert}}',
|
|
68
|
-
priority: props.priority ?? datadogv2_1.DatadogMonitor.DEFAULT_PRIORITY,
|
|
69
|
-
notification: props.notification,
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
exports.AwsEcsAbruptlyStoppedMonitor = AwsEcsAbruptlyStoppedMonitor;
|
|
74
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
75
|
-
AwsEcsAbruptlyStoppedMonitor[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.AwsEcsAbruptlyStoppedMonitor", version: "0.0.0" };
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1hYnJ1cHRseS1zdG9wcGVkLW1vbml0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLW91Ym91dC1vcmRlci1ib29rL2F3cy1lY3MtYWJydXB0bHktc3RvcHBlZC1tb25pdG9yL2F3cy1lY3MtYWJydXB0bHktc3RvcHBlZC1tb25pdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQW1DO0FBQ25DLDJDQUF1QztBQUN2QyxrREFBaUc7QUFvQ2pHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQWEsNEJBQTZCLFNBQVEsc0JBQVM7SUFDekQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFxQztRQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztRQUV6RixJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSw0QkFBNEIsRUFBRTtZQUNoRSxZQUFZLEVBQUUsc0JBQXNCLENBQUMsWUFBWTtZQUNqRCxTQUFTLEVBQUUsQ0FBQztTQUNiLENBQUMsQ0FBQztRQUVILDRDQUE0QztRQUM1QyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUNsRCxZQUFZLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDO2dCQUNuQixVQUFVLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxxQ0FBcUMsRUFBRSxvQkFBb0IsQ0FBQztnQkFDbEcsTUFBTSxFQUFFO29CQUNOLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQztvQkFDMUIsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDO29CQUN2QixHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2lCQUM1RDthQUNGO1lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUNqRixDQUFDLENBQUM7UUFFSCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUN2RSxJQUFJLEVBQ0osa0NBQWtDLEVBQ2xDO1lBQ0UsV0FBVyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGdDQUFnQyxDQUFDO1lBQ2pFLGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQ0YsQ0FBQztRQUVGLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUseUJBQXlCLEVBQUU7WUFDbkUsV0FBVyxFQUFFLElBQUksR0FBRyxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDO1lBQ2hGLGFBQWEsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQy9DLHlCQUF5QixFQUN6QixxQ0FBcUMsQ0FDdEM7WUFDRCxRQUFRLEVBQUUsc0JBQXNCO1NBQ2pDLENBQUMsQ0FBQztRQUVILDRGQUE0RjtRQUM1RixJQUFJLDBCQUFjLENBQUMsSUFBSSxFQUFFLCtCQUErQixFQUFFO1lBQ3hELElBQUksRUFBRSwrQkFBK0I7WUFDckMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFdBQVcsRUFBRSx3Q0FBNEIsQ0FBQyxTQUFTO1lBQ25ELEtBQUssRUFBRSxvQkFBb0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyw0QkFDbkQsc0JBQXNCLENBQUMsWUFDekIsaURBQWlEO1lBQ2pELE9BQU8sRUFBRSxzRUFBc0U7Z0JBQ3JFLHVFQUF1RTtZQUNqRixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsSUFBSSwwQkFBYyxDQUFDLGdCQUFnQjtZQUMzRCxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7U0FDakMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUF4REgsb0VBeURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRGF0YWRvZ01vbml0b3IsIERhdGFkb2dNb25pdG9yUXVlcnlBbGVydFR5cGUsIElOb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi8uLi9kYXRhZG9ndjInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVjc0FicnVwdGx5U3RvcHBlZE1vbml0b3JQcm9wcyB7XG5cbiAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gd2hpY2ggdGhlIG1vbml0b3IgYmVsb25ncy5cbiAgICAgKlxuICAgICAqIFVzZWQgdG8gZ2VuZXJhdGUgdGhlIG1vbml0b3IgbmFtZSBhcyB3ZWxsIGEgYXBwbHkgdGhlIGBzZXJ2aWNlYCB0YWcuXG4gICAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAgICogVG8gZXhwbGljaXRseSBkaXNhYmxlIG5vdGlmaWNhdGlvbnMgdXNlIHtAbGluayBOb05vdGlmaWNhdGlvbn0uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIHtAbGluayBEZWZhdWx0U2xhY2tOb3RpZmljYXRpb259XG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL21vbml0b3JzL25vdGlmeVxuICAgICAqL1xuXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbj86IElOb3RpZmljYXRpb247XG5cbiAgLyoqXG4gICAgICogVGhlIGFsZXJ0IHByaW9yaXR5IG9mIHRoZSBtb25pdG9yXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIHtAbGluayBEYXRhZG9nTW9uaXRvci5ERUZBVUxUX1BSSU9SSVRZfVxuICAgICAqL1xuXG4gIHJlYWRvbmx5IHByaW9yaXR5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgICAqIEFSTiBvZiB0aGUgY2x1c3RlciB0aGF0IHNob3VsZCBiZSBtb25pdG9yZWQsIGNvbnN1bWluZyBvbmx5IEVDUyBldmVudHMgYmVsb25naW5nIHRvIHRoZSBjbHVzdGVyLlxuICAgICAqIElmIG5vIGNsdXN0ZXIgaXMgcHJvdmlkZWQsIHRoZSBtb25pdG9yIHdpbGwgY29uc3VtZSBFQ1MgZXZlbnRzIGZvciBhbGwgY2x1c3RlcnMgd2l0aGluIHRoZSBhY2NvdW50LlxuICAgICAqL1xuICByZWFkb25seSBjbHVzdGVyQXJuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqICMgV0FSTklORzogVGhpcyBjb25zdHJ1Y3QgaXMgc3RpbGwgaW4gdGhlIGJldGEgcGhhc2UuXG4gKlxuICogVGhlIGNvbnN0cnVjdCBjcmVhdGVzIG1vbml0b3JpbmcgZm9yIGRldGVjdGluZyBFQ1MgY29udGFpbmVycyB0aGF0IHdlcmUgc3RvcHBlZCBhYnJ1cHRseSBieSBBV1MgZm9yIHJlYXNvbnMgc3VjaCBhcyxcbiAqIG91dCBvZiBtZW1vcnksIG9yIGZhaWxlZCBoZWFsdGggY2hlY2tzLlxuICpcbiAqIFRoaXMgbW9uaXRvciBhZGRzIHRyYW5zcGFyZW5jeSB0byBzdWNoIGNhc2VzLCB3aGljaCBvdGhlcndpc2Ugd291bGQgaGFwcGVuIHdpdGhvdXQgYmVpbmcgbm90aWNlZCBhbmQgY291bGQgZXNjYWxhdGVcbiAqIHRvIGJpZ2dlciBpc3N1ZXMsIGxpa2UgYSBzZXJ2aWNlIHRoYXQgcmVxdWlyZXMgbW9yZSByZXNvdXJjZXMgdG8gcnVuIHByb3Blcmx5LlxuICpcbiAqIFRoZSBjb25zdHJ1Y3Qgd2lsbCBjb25zdW1lIHRoZSBFQ1MgZXZlbnRzIGFuZCBzZW5kIHRoZW0gdG8gYSBDbG91ZFdhdGNoIGxvZyBncm91cCwgd2hpY2ggYXJlIGZvcndhcmRlZCB0byBEYXRhZG9nLFxuICogYWxsb3dpbmcgYmV0dGVyIGFuYWx5c2VzIHNpbmNlIEFXUyBrZWVwcyB0aGUgc3RvcHBlZCB0YXNrIGRldGFpbHMgZm9yIG9ubHkgb25lIGhvdXIgYW5kIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgYVxuICogbW9uaXRvci5cbiAqXG4gKiBDb250cmlidXRpb25zIGFyZSBtb3JlIHRoYW4gd2VsY29tZSwgcGxlYXNlIGdldCBpbiB0b3VjaCB3aXRoIFRlYW0gT3V0Ym91bmQgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkuXG4gKlxuICogVGhpcyBjb25zdHJ1Y3Qgd2FzIGJhc2VkIG9uIGFuIEFXUyBibG9nIHBvc3QgYWJvdXQgRUNTIGFub21hbHkgZGV0ZWN0aW9uLCBzZWUgaGVyZTpcbiAqIHtAbGluayBodHRwczovL2F3cy5hbWF6b24uY29tL2Jsb2dzL2NvbnRhaW5lcnMvYW1hem9uLWVsYXN0aWMtY29udGFpbmVyLXNlcnZpY2UtYW5vbWFseS1kZXRlY3Rpb24tdXNpbmctYW1hem9uLWV2ZW50YnJpZGdlL30uXG4gKlxuICogTW9yZSBkZXRhaWxzIG9uIHRoZSBBV1MgRUNTIGV2ZW50cyBjYW4gYmUgZm91bmQgaGVyZTpcbiAqIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3NfY3dlX2V2ZW50cy5odG1sfS5cbiAqL1xuZXhwb3J0IGNsYXNzIEF3c0Vjc0FicnVwdGx5U3RvcHBlZE1vbml0b3IgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRWNzQWJydXB0bHlTdG9wcGVkTW9uaXRvclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGVjc1N0YXRlQ2hhbmdlTG9nR3JvdXAgPSBuZXcgY2RrLmF3c19sb2dzLkxvZ0dyb3VwKHRoaXMsICdFY3NTdGF0ZUNoYW5nZUxvZ0dyb3VwJyk7XG5cbiAgICBuZXcgY2RrLmF3c19sb2dzLkxvZ1JldGVudGlvbih0aGlzLCAnRWNzU3RhdGVDaGFuZ2VMb2dSZXRlbnRpb24nLCB7XG4gICAgICBsb2dHcm91cE5hbWU6IGVjc1N0YXRlQ2hhbmdlTG9nR3JvdXAubG9nR3JvdXBOYW1lLFxuICAgICAgcmV0ZW50aW9uOiAzLFxuICAgIH0pO1xuXG4gICAgLy8gUnVsZSB0byBjb3ZlciBhbGwgY2x1c3RlcnMgc3RhdHVzIGNoYW5nZXNcbiAgICBuZXcgY2RrLmF3c19ldmVudHMuUnVsZSh0aGlzLCAnRWNzU3RhdGVDaGFuZ2VSdWxlJywge1xuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIHNvdXJjZTogWydhd3MuZWNzJ10sXG4gICAgICAgIGRldGFpbFR5cGU6IFsnRUNTIFRhc2sgU3RhdGUgQ2hhbmdlJywgJ0VDUyBDb250YWluZXIgSW5zdGFuY2UgU3RhdGUgQ2hhbmdlJywgJ0VDUyBTZXJ2aWNlIEFjdGlvbiddLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBkZXNpcmVkU3RhdHVzOiBbJ1NUT1BQRUQnXSxcbiAgICAgICAgICBsYXN0U3RhdHVzOiBbJ1NUT1BQRUQnXSxcbiAgICAgICAgICAuLi4ocHJvcHMuY2x1c3RlckFybiAmJiB7IGNsdXN0ZXJBcm46IFtwcm9wcy5jbHVzdGVyQXJuXSB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbbmV3IGNkay5hd3NfZXZlbnRzX3RhcmdldHMuQ2xvdWRXYXRjaExvZ0dyb3VwKGVjc1N0YXRlQ2hhbmdlTG9nR3JvdXApXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxvZ0ZvcndhcmRlckxhbWJkYSA9IGNkay5hd3NfbGFtYmRhLkZ1bmN0aW9uLmZyb21GdW5jdGlvbkF0dHJpYnV0ZXMoXG4gICAgICB0aGlzLFxuICAgICAgJ0Vjc1N0YXRlQ2hhbmdlTG9nRm9yd2FyZGVyTGFtYmRhJyxcbiAgICAgIHtcbiAgICAgICAgZnVuY3Rpb25Bcm46IGNkay5Gbi5pbXBvcnRWYWx1ZSgnZGF0YWRvZy1mb3J3YXJkZXItRm9yd2FyZGVyQXJuJyksXG4gICAgICAgIHNhbWVFbnZpcm9ubWVudDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIG5ldyBjZGsuYXdzX2xvZ3MuU3Vic2NyaXB0aW9uRmlsdGVyKHRoaXMsICdFY3NTdGF0ZUNoYW5nZUxvZ0ZpbHRlcicsIHtcbiAgICAgIGRlc3RpbmF0aW9uOiBuZXcgY2RrLmF3c19sb2dzX2Rlc3RpbmF0aW9ucy5MYW1iZGFEZXN0aW5hdGlvbihsb2dGb3J3YXJkZXJMYW1iZGEpLFxuICAgICAgZmlsdGVyUGF0dGVybjogY2RrLmF3c19sb2dzLkZpbHRlclBhdHRlcm4uYW55VGVybShcbiAgICAgICAgJ0NvbnRhaW5lciBraWxsZWQgZHVlIHRvJyxcbiAgICAgICAgJ1Rhc2sgZmFpbGVkIGNvbnRhaW5lciBoZWFsdGggY2hlY2tzJyxcbiAgICAgICksXG4gICAgICBsb2dHcm91cDogZWNzU3RhdGVDaGFuZ2VMb2dHcm91cCxcbiAgICB9KTtcblxuICAgIC8vIEFmdGVyIGJlaW5nIG1pZ3JhdGVkIHRvIHRoZSBuZXcgdmVyc2lvbiBpdCBjYW4gYmUgYWRkZWQgdG8gdGhlIENMQUlEIGNvbnN0cnVjdCByZXBvc2l0b3J5XG4gICAgbmV3IERhdGFkb2dNb25pdG9yKHRoaXMsICdFY3NTdGF0ZUNoYW5nZUxvZ0dyb3VwTW9uaXRvcicsIHtcbiAgICAgIG5hbWU6ICdVbmV4cGVjdGVkIEVDUyBzdGF0dXMgY2hhbmdlcycsXG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBtb25pdG9yVHlwZTogRGF0YWRvZ01vbml0b3JRdWVyeUFsZXJ0VHlwZS5MT0dfQUxFUlQsXG4gICAgICBxdWVyeTogYGxvZ3MoXCJhY2NvdW50X2lkOiR7Y2RrLlN0YWNrLm9mKHRoaXMpLmFjY291bnR9IEBhd3MuYXdzbG9ncy5sb2dHcm91cDpcXFwiJHtcbiAgICAgICAgZWNzU3RhdGVDaGFuZ2VMb2dHcm91cC5sb2dHcm91cE5hbWVcbiAgICAgIH1cXFwiXCIpLmluZGV4KFwiKlwiKS5yb2xsdXAoXCJjb3VudFwiKS5sYXN0KFwiNW1cIikgPj0gMWAsXG4gICAgICBtZXNzYWdlOiAne3sjaXNfYWxlcnR9fVRoZXJlIGFyZSB1bmV4cGVjdGVkIEVDUyBzdGF0dXMgY2hhbmdlcyBpbiB0aGUgYWNjb3VudCAnICtcbiAgICAgICAgICAgICAgICAne3tsb2cudGFncy5hY2NvdW50X2lkfX0sIG1vcmUgZGV0YWlscyBoZXJlIHt7bG9nLmxpbmt9fSB7ey9pc19hbGVydH19JyxcbiAgICAgIHByaW9yaXR5OiBwcm9wcy5wcmlvcml0eSA/PyBEYXRhZG9nTW9uaXRvci5ERUZBVUxUX1BSSU9SSVRZLFxuICAgICAgbm90aWZpY2F0aW9uOiBwcm9wcy5ub3RpZmljYXRpb24sXG4gICAgfSk7XG4gIH1cbn1cblxuIl19
|