@rio-cloud/cdk-v2-constructs 4.26.0 → 4.28.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 +64 -29
- package/API.md +42 -5
- package/CHANGELOG.md +15 -0
- package/README.md +3 -0
- package/developers-readme.md +16 -0
- package/lib/contributions/team-claid/datadog-usage-monitoring/datadog-usage-monitoring.d.ts +5 -0
- package/lib/contributions/team-claid/datadog-usage-monitoring/datadog-usage-monitoring.js +17 -24
- package/lib/contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.d.ts +29 -0
- package/lib/contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.js +66 -0
- package/lib/contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor/index.d.ts +1 -0
- package/lib/contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor/index.js +18 -0
- package/lib/contributions/team-transport-two/pipeline/pipeline-stack.js +3 -2
- package/lib/fargate/datadog.d.ts +7 -1
- package/lib/fargate/datadog.js +22 -8
- package/lib/fargate/rio-fargate-service.d.ts +12 -2
- package/lib/fargate/rio-fargate-service.js +19 -3
- package/package.json +1 -1
- package/version.json +1 -1
package/.jsii
CHANGED
|
@@ -3575,7 +3575,7 @@
|
|
|
3575
3575
|
},
|
|
3576
3576
|
"name": "@rio-cloud/cdk-v2-constructs",
|
|
3577
3577
|
"readme": {
|
|
3578
|
-
"markdown": "# RIO CDK Constructs\n\nThis package contains CDK2 constructs for RIO teams.\n\n> NPM: `@rio-cloud/cdk-v2-constructs`\n\n## Bootstrapping of CDK project\n\n```\n$ npx cdk init --language typescript\n```\n\n## Installation\n\n```\n$ npm install --save @rio-cloud/cdk-v2-constructs\n```\n\n## See also\n\n * [How to contribut](./CONTRIBUTION.md)\n * [Changelog](./CHANGELOG.md)\n * [brief API desciption](./API.md)\n\n## FAQ's\n- How can I udpate the thresholds of monitors created by watchful?\n\n There is an `overrideAlarmThreshold` method which can be used to override the default watchful thresholds. Please make aure to use the method before the `watchscope` function.\n Eg -\n ```\n ...\n const dw = new Watchful(stack, 'Watchful', {});\n dw.overrideAlarmThreshold({\n monitoredResourceScope: lambdaA,\n monitorType: MonitorType.ERRORS,\n threshold: 5,\n });\n dw.watchScope(stack);\n ```"
|
|
3578
|
+
"markdown": "# RIO CDK Constructs\n\nThis package contains CDK2 constructs for RIO teams.\n\n> NPM: `@rio-cloud/cdk-v2-constructs`\n\n## Bootstrapping of CDK project\n\n```\n$ npx cdk init --language typescript\n```\n\n## Installation\n\n```\n$ npm install --save @rio-cloud/cdk-v2-constructs\n```\n\n## See also\n\n * [How to contribut](./CONTRIBUTION.md)\n * [Changelog](./CHANGELOG.md)\n * [brief API desciption](./API.md)\n\n## Internal documentation for library devs\n[Documentation](./developers-readme.md)\n\n## FAQ's\n- How can I udpate the thresholds of monitors created by watchful?\n\n There is an `overrideAlarmThreshold` method which can be used to override the default watchful thresholds. Please make aure to use the method before the `watchscope` function.\n Eg -\n ```\n ...\n const dw = new Watchful(stack, 'Watchful', {});\n dw.overrideAlarmThreshold({\n monitoredResourceScope: lambdaA,\n monitorType: MonitorType.ERRORS,\n threshold: 5,\n });\n dw.watchScope(stack);\n ```"
|
|
3579
3579
|
},
|
|
3580
3580
|
"repository": {
|
|
3581
3581
|
"type": "git",
|
|
@@ -4770,12 +4770,21 @@
|
|
|
4770
4770
|
},
|
|
4771
4771
|
"name": "AWS_FIRE_LENS"
|
|
4772
4772
|
},
|
|
4773
|
+
{
|
|
4774
|
+
"docs": {
|
|
4775
|
+
"deprecated": "use DATADOG_FORWARDER_LAMBDA",
|
|
4776
|
+
"see": "https://bitbucket.collaboration-man.com/projects/RIODEV/repos/datadog-integration/browse",
|
|
4777
|
+
"stability": "deprecated",
|
|
4778
|
+
"summary": "Store logs in AWS Cloudwatch and use the RIO customized Datadog log forwarder lambda from the legacy datadog-integration, to forward the logs to Datadog,."
|
|
4779
|
+
},
|
|
4780
|
+
"name": "FORWARDER_LAMBDA"
|
|
4781
|
+
},
|
|
4773
4782
|
{
|
|
4774
4783
|
"docs": {
|
|
4775
4784
|
"stability": "stable",
|
|
4776
4785
|
"summary": "Store logs in AWS Cloudwatch and use the Datadog log forwarder lambda to forward the logs to Datadog, see https://docs.datadoghq.com/integrations/ecs_fargate/?tab=logdriver#log-collection."
|
|
4777
4786
|
},
|
|
4778
|
-
"name": "
|
|
4787
|
+
"name": "DATADOG_FORWARDER_LAMBDA"
|
|
4779
4788
|
},
|
|
4780
4789
|
{
|
|
4781
4790
|
"docs": {
|
|
@@ -5538,7 +5547,7 @@
|
|
|
5538
5547
|
},
|
|
5539
5548
|
"locationInModule": {
|
|
5540
5549
|
"filename": "src/contributions/team-claid/datadog-usage-monitoring/datadog-usage-monitoring.ts",
|
|
5541
|
-
"line":
|
|
5550
|
+
"line": 29
|
|
5542
5551
|
},
|
|
5543
5552
|
"parameters": [
|
|
5544
5553
|
{
|
|
@@ -5564,7 +5573,7 @@
|
|
|
5564
5573
|
"kind": "class",
|
|
5565
5574
|
"locationInModule": {
|
|
5566
5575
|
"filename": "src/contributions/team-claid/datadog-usage-monitoring/datadog-usage-monitoring.ts",
|
|
5567
|
-
"line":
|
|
5576
|
+
"line": 28
|
|
5568
5577
|
},
|
|
5569
5578
|
"name": "DatadogUsageMonitoring",
|
|
5570
5579
|
"symbolId": "src/contributions/team-claid/datadog-usage-monitoring/datadog-usage-monitoring:DatadogUsageMonitoring"
|
|
@@ -5591,7 +5600,7 @@
|
|
|
5591
5600
|
"immutable": true,
|
|
5592
5601
|
"locationInModule": {
|
|
5593
5602
|
"filename": "src/contributions/team-claid/datadog-usage-monitoring/datadog-usage-monitoring.ts",
|
|
5594
|
-
"line":
|
|
5603
|
+
"line": 21
|
|
5595
5604
|
},
|
|
5596
5605
|
"name": "organization",
|
|
5597
5606
|
"type": {
|
|
@@ -5616,18 +5625,35 @@
|
|
|
5616
5625
|
{
|
|
5617
5626
|
"abstract": true,
|
|
5618
5627
|
"docs": {
|
|
5619
|
-
"
|
|
5628
|
+
"deprecated": "not supported anymore. use `notification` instead.",
|
|
5629
|
+
"stability": "deprecated"
|
|
5620
5630
|
},
|
|
5621
5631
|
"immutable": true,
|
|
5622
5632
|
"locationInModule": {
|
|
5623
5633
|
"filename": "src/contributions/team-claid/datadog-usage-monitoring/datadog-usage-monitoring.ts",
|
|
5624
|
-
"line":
|
|
5634
|
+
"line": 19
|
|
5625
5635
|
},
|
|
5626
5636
|
"name": "alertType",
|
|
5627
5637
|
"optional": true,
|
|
5628
5638
|
"type": {
|
|
5629
5639
|
"primitive": "string"
|
|
5630
5640
|
}
|
|
5641
|
+
},
|
|
5642
|
+
{
|
|
5643
|
+
"abstract": true,
|
|
5644
|
+
"docs": {
|
|
5645
|
+
"stability": "stable"
|
|
5646
|
+
},
|
|
5647
|
+
"immutable": true,
|
|
5648
|
+
"locationInModule": {
|
|
5649
|
+
"filename": "src/contributions/team-claid/datadog-usage-monitoring/datadog-usage-monitoring.ts",
|
|
5650
|
+
"line": 20
|
|
5651
|
+
},
|
|
5652
|
+
"name": "notification",
|
|
5653
|
+
"optional": true,
|
|
5654
|
+
"type": {
|
|
5655
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.datadogv2.INotification"
|
|
5656
|
+
}
|
|
5631
5657
|
}
|
|
5632
5658
|
],
|
|
5633
5659
|
"symbolId": "src/contributions/team-claid/datadog-usage-monitoring/datadog-usage-monitoring:DatadogUsageMonitoringProps"
|
|
@@ -7527,7 +7553,7 @@
|
|
|
7527
7553
|
"immutable": true,
|
|
7528
7554
|
"locationInModule": {
|
|
7529
7555
|
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
7530
|
-
"line":
|
|
7556
|
+
"line": 274
|
|
7531
7557
|
},
|
|
7532
7558
|
"name": "branchCodeBuildProject",
|
|
7533
7559
|
"type": {
|
|
@@ -7541,7 +7567,7 @@
|
|
|
7541
7567
|
"immutable": true,
|
|
7542
7568
|
"locationInModule": {
|
|
7543
7569
|
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
7544
|
-
"line":
|
|
7570
|
+
"line": 270
|
|
7545
7571
|
},
|
|
7546
7572
|
"name": "mainCodebuildProject",
|
|
7547
7573
|
"type": {
|
|
@@ -8092,7 +8118,7 @@
|
|
|
8092
8118
|
},
|
|
8093
8119
|
"locationInModule": {
|
|
8094
8120
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
8095
|
-
"line":
|
|
8121
|
+
"line": 377
|
|
8096
8122
|
},
|
|
8097
8123
|
"parameters": [
|
|
8098
8124
|
{
|
|
@@ -8121,7 +8147,7 @@
|
|
|
8121
8147
|
"kind": "class",
|
|
8122
8148
|
"locationInModule": {
|
|
8123
8149
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
8124
|
-
"line":
|
|
8150
|
+
"line": 331
|
|
8125
8151
|
},
|
|
8126
8152
|
"name": "RioFargateService",
|
|
8127
8153
|
"properties": [
|
|
@@ -8133,7 +8159,7 @@
|
|
|
8133
8159
|
"immutable": true,
|
|
8134
8160
|
"locationInModule": {
|
|
8135
8161
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
8136
|
-
"line":
|
|
8162
|
+
"line": 373
|
|
8137
8163
|
},
|
|
8138
8164
|
"name": "connections",
|
|
8139
8165
|
"overrides": "aws-cdk-lib.aws_ec2.IConnectable",
|
|
@@ -8148,7 +8174,7 @@
|
|
|
8148
8174
|
"immutable": true,
|
|
8149
8175
|
"locationInModule": {
|
|
8150
8176
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
8151
|
-
"line":
|
|
8177
|
+
"line": 369
|
|
8152
8178
|
},
|
|
8153
8179
|
"name": "datadogSideCarContainerDefinition",
|
|
8154
8180
|
"type": {
|
|
@@ -8162,7 +8188,7 @@
|
|
|
8162
8188
|
"immutable": true,
|
|
8163
8189
|
"locationInModule": {
|
|
8164
8190
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
8165
|
-
"line":
|
|
8191
|
+
"line": 374
|
|
8166
8192
|
},
|
|
8167
8193
|
"name": "service",
|
|
8168
8194
|
"type": {
|
|
@@ -8176,7 +8202,7 @@
|
|
|
8176
8202
|
"immutable": true,
|
|
8177
8203
|
"locationInModule": {
|
|
8178
8204
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
8179
|
-
"line":
|
|
8205
|
+
"line": 368
|
|
8180
8206
|
},
|
|
8181
8207
|
"name": "serviceContainerDefinition",
|
|
8182
8208
|
"type": {
|
|
@@ -8190,7 +8216,7 @@
|
|
|
8190
8216
|
"immutable": true,
|
|
8191
8217
|
"locationInModule": {
|
|
8192
8218
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
8193
|
-
"line":
|
|
8219
|
+
"line": 371
|
|
8194
8220
|
},
|
|
8195
8221
|
"name": "taskDefinition",
|
|
8196
8222
|
"type": {
|
|
@@ -8204,7 +8230,7 @@
|
|
|
8204
8230
|
"immutable": true,
|
|
8205
8231
|
"locationInModule": {
|
|
8206
8232
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
8207
|
-
"line":
|
|
8233
|
+
"line": 370
|
|
8208
8234
|
},
|
|
8209
8235
|
"name": "logRouterContainerDefinition",
|
|
8210
8236
|
"optional": true,
|
|
@@ -8219,7 +8245,7 @@
|
|
|
8219
8245
|
"immutable": true,
|
|
8220
8246
|
"locationInModule": {
|
|
8221
8247
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
8222
|
-
"line":
|
|
8248
|
+
"line": 375
|
|
8223
8249
|
},
|
|
8224
8250
|
"name": "targetGroup",
|
|
8225
8251
|
"optional": true,
|
|
@@ -13286,12 +13312,21 @@
|
|
|
13286
13312
|
},
|
|
13287
13313
|
"name": "AWS_FIRE_LENS"
|
|
13288
13314
|
},
|
|
13315
|
+
{
|
|
13316
|
+
"docs": {
|
|
13317
|
+
"deprecated": "use DATADOG_FORWARDER_LAMBDA",
|
|
13318
|
+
"see": "https://bitbucket.collaboration-man.com/projects/RIODEV/repos/datadog-integration/browse",
|
|
13319
|
+
"stability": "deprecated",
|
|
13320
|
+
"summary": "Store logs in AWS Cloudwatch and use the RIO customized Datadog log forwarder lambda from the legacy datadog-integration, to forward the logs to Datadog,."
|
|
13321
|
+
},
|
|
13322
|
+
"name": "FORWARDER_LAMBDA"
|
|
13323
|
+
},
|
|
13289
13324
|
{
|
|
13290
13325
|
"docs": {
|
|
13291
13326
|
"stability": "stable",
|
|
13292
13327
|
"summary": "Store logs in AWS Cloudwatch and use the Datadog log forwarder lambda to forward the logs to Datadog, see https://docs.datadoghq.com/integrations/ecs_fargate/?tab=logdriver#log-collection."
|
|
13293
13328
|
},
|
|
13294
|
-
"name": "
|
|
13329
|
+
"name": "DATADOG_FORWARDER_LAMBDA"
|
|
13295
13330
|
},
|
|
13296
13331
|
{
|
|
13297
13332
|
"docs": {
|
|
@@ -13785,7 +13820,7 @@
|
|
|
13785
13820
|
},
|
|
13786
13821
|
"locationInModule": {
|
|
13787
13822
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
13788
|
-
"line":
|
|
13823
|
+
"line": 377
|
|
13789
13824
|
},
|
|
13790
13825
|
"parameters": [
|
|
13791
13826
|
{
|
|
@@ -13814,7 +13849,7 @@
|
|
|
13814
13849
|
"kind": "class",
|
|
13815
13850
|
"locationInModule": {
|
|
13816
13851
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
13817
|
-
"line":
|
|
13852
|
+
"line": 331
|
|
13818
13853
|
},
|
|
13819
13854
|
"name": "RioFargateService",
|
|
13820
13855
|
"namespace": "fargate",
|
|
@@ -13827,7 +13862,7 @@
|
|
|
13827
13862
|
"immutable": true,
|
|
13828
13863
|
"locationInModule": {
|
|
13829
13864
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
13830
|
-
"line":
|
|
13865
|
+
"line": 373
|
|
13831
13866
|
},
|
|
13832
13867
|
"name": "connections",
|
|
13833
13868
|
"overrides": "aws-cdk-lib.aws_ec2.IConnectable",
|
|
@@ -13842,7 +13877,7 @@
|
|
|
13842
13877
|
"immutable": true,
|
|
13843
13878
|
"locationInModule": {
|
|
13844
13879
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
13845
|
-
"line":
|
|
13880
|
+
"line": 369
|
|
13846
13881
|
},
|
|
13847
13882
|
"name": "datadogSideCarContainerDefinition",
|
|
13848
13883
|
"type": {
|
|
@@ -13856,7 +13891,7 @@
|
|
|
13856
13891
|
"immutable": true,
|
|
13857
13892
|
"locationInModule": {
|
|
13858
13893
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
13859
|
-
"line":
|
|
13894
|
+
"line": 374
|
|
13860
13895
|
},
|
|
13861
13896
|
"name": "service",
|
|
13862
13897
|
"type": {
|
|
@@ -13870,7 +13905,7 @@
|
|
|
13870
13905
|
"immutable": true,
|
|
13871
13906
|
"locationInModule": {
|
|
13872
13907
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
13873
|
-
"line":
|
|
13908
|
+
"line": 368
|
|
13874
13909
|
},
|
|
13875
13910
|
"name": "serviceContainerDefinition",
|
|
13876
13911
|
"type": {
|
|
@@ -13884,7 +13919,7 @@
|
|
|
13884
13919
|
"immutable": true,
|
|
13885
13920
|
"locationInModule": {
|
|
13886
13921
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
13887
|
-
"line":
|
|
13922
|
+
"line": 371
|
|
13888
13923
|
},
|
|
13889
13924
|
"name": "taskDefinition",
|
|
13890
13925
|
"type": {
|
|
@@ -13898,7 +13933,7 @@
|
|
|
13898
13933
|
"immutable": true,
|
|
13899
13934
|
"locationInModule": {
|
|
13900
13935
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
13901
|
-
"line":
|
|
13936
|
+
"line": 370
|
|
13902
13937
|
},
|
|
13903
13938
|
"name": "logRouterContainerDefinition",
|
|
13904
13939
|
"optional": true,
|
|
@@ -13913,7 +13948,7 @@
|
|
|
13913
13948
|
"immutable": true,
|
|
13914
13949
|
"locationInModule": {
|
|
13915
13950
|
"filename": "src/fargate/rio-fargate-service.ts",
|
|
13916
|
-
"line":
|
|
13951
|
+
"line": 375
|
|
13917
13952
|
},
|
|
13918
13953
|
"name": "targetGroup",
|
|
13919
13954
|
"optional": true,
|
|
@@ -15342,5 +15377,5 @@
|
|
|
15342
15377
|
}
|
|
15343
15378
|
},
|
|
15344
15379
|
"version": "0.0.0",
|
|
15345
|
-
"fingerprint": "
|
|
15380
|
+
"fingerprint": "qWM157f65ZATe8PHnX8Ocq6KX0F5HImX7i3UtApG7BE="
|
|
15346
15381
|
}
|
package/API.md
CHANGED
|
@@ -8346,6 +8346,7 @@ const datadogUsageMonitoringProps: DatadogUsageMonitoringProps = { ... }
|
|
|
8346
8346
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.DatadogUsageMonitoringProps.property.organization">organization</a></code> | <code>string</code> | *No description.* |
|
|
8347
8347
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.DatadogUsageMonitoringProps.property.serviceName">serviceName</a></code> | <code>string</code> | *No description.* |
|
|
8348
8348
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.DatadogUsageMonitoringProps.property.alertType">alertType</a></code> | <code>string</code> | *No description.* |
|
|
8349
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.DatadogUsageMonitoringProps.property.notification">notification</a></code> | <code>@rio-cloud/cdk-v2-constructs.datadogv2.INotification</code> | *No description.* |
|
|
8349
8350
|
|
|
8350
8351
|
---
|
|
8351
8352
|
|
|
@@ -8369,7 +8370,9 @@ public readonly serviceName: string;
|
|
|
8369
8370
|
|
|
8370
8371
|
---
|
|
8371
8372
|
|
|
8372
|
-
#####
|
|
8373
|
+
##### ~~`alertType`~~<sup>Optional</sup> <a name="alertType" id="@rio-cloud/cdk-v2-constructs.DatadogUsageMonitoringProps.property.alertType"></a>
|
|
8374
|
+
|
|
8375
|
+
- *Deprecated:* not supported anymore. use `notification` instead.
|
|
8373
8376
|
|
|
8374
8377
|
```typescript
|
|
8375
8378
|
public readonly alertType: string;
|
|
@@ -8379,6 +8382,16 @@ public readonly alertType: string;
|
|
|
8379
8382
|
|
|
8380
8383
|
---
|
|
8381
8384
|
|
|
8385
|
+
##### `notification`<sup>Optional</sup> <a name="notification" id="@rio-cloud/cdk-v2-constructs.DatadogUsageMonitoringProps.property.notification"></a>
|
|
8386
|
+
|
|
8387
|
+
```typescript
|
|
8388
|
+
public readonly notification: INotification;
|
|
8389
|
+
```
|
|
8390
|
+
|
|
8391
|
+
- *Type:* @rio-cloud/cdk-v2-constructs.datadogv2.INotification
|
|
8392
|
+
|
|
8393
|
+
---
|
|
8394
|
+
|
|
8382
8395
|
### FargateTaskDefinitionProps <a name="FargateTaskDefinitionProps" id="@rio-cloud/cdk-v2-constructs.FargateTaskDefinitionProps"></a>
|
|
8383
8396
|
|
|
8384
8397
|
#### Initializer <a name="Initializer" id="@rio-cloud/cdk-v2-constructs.FargateTaskDefinitionProps.Initializer"></a>
|
|
@@ -15103,7 +15116,8 @@ The allowed values for backup criticality levels.
|
|
|
15103
15116
|
| **Name** | **Description** |
|
|
15104
15117
|
| --- | --- |
|
|
15105
15118
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.DataDogLoggingMode.AWS_FIRE_LENS">AWS_FIRE_LENS</a></code> | Forward logs directly to Datadog using AWS FireLens as log router, see https://docs.datadoghq.com/integrations/ecs_fargate/?tab=fluentbitandfirelens#log-collection. |
|
|
15106
|
-
| <code><a href="#@rio-cloud/cdk-v2-constructs.DataDogLoggingMode.FORWARDER_LAMBDA">FORWARDER_LAMBDA</a></code> | Store logs in AWS Cloudwatch and use the Datadog log forwarder lambda to forward the logs to Datadog
|
|
15119
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.DataDogLoggingMode.FORWARDER_LAMBDA">FORWARDER_LAMBDA</a></code> | Store logs in AWS Cloudwatch and use the RIO customized Datadog log forwarder lambda from the legacy datadog-integration, to forward the logs to Datadog,. |
|
|
15120
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.DataDogLoggingMode.DATADOG_FORWARDER_LAMBDA">DATADOG_FORWARDER_LAMBDA</a></code> | Store logs in AWS Cloudwatch and use the Datadog log forwarder lambda to forward the logs to Datadog, see https://docs.datadoghq.com/integrations/ecs_fargate/?tab=logdriver#log-collection. |
|
|
15107
15121
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.DataDogLoggingMode.NONE">NONE</a></code> | Only log to AWS Cloudwatch without forwarding the logs to Datadog. |
|
|
15108
15122
|
|
|
15109
15123
|
---
|
|
@@ -15115,7 +15129,18 @@ Forward logs directly to Datadog using AWS FireLens as log router, see https://d
|
|
|
15115
15129
|
---
|
|
15116
15130
|
|
|
15117
15131
|
|
|
15118
|
-
#####
|
|
15132
|
+
##### ~~`FORWARDER_LAMBDA`~~ <a name="FORWARDER_LAMBDA" id="@rio-cloud/cdk-v2-constructs.DataDogLoggingMode.FORWARDER_LAMBDA"></a>
|
|
15133
|
+
|
|
15134
|
+
- *Deprecated:* use DATADOG_FORWARDER_LAMBDA
|
|
15135
|
+
|
|
15136
|
+
Store logs in AWS Cloudwatch and use the RIO customized Datadog log forwarder lambda from the legacy datadog-integration, to forward the logs to Datadog,.
|
|
15137
|
+
|
|
15138
|
+
> [https://bitbucket.collaboration-man.com/projects/RIODEV/repos/datadog-integration/browse](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/datadog-integration/browse)
|
|
15139
|
+
|
|
15140
|
+
---
|
|
15141
|
+
|
|
15142
|
+
|
|
15143
|
+
##### `DATADOG_FORWARDER_LAMBDA` <a name="DATADOG_FORWARDER_LAMBDA" id="@rio-cloud/cdk-v2-constructs.DataDogLoggingMode.DATADOG_FORWARDER_LAMBDA"></a>
|
|
15119
15144
|
|
|
15120
15145
|
Store logs in AWS Cloudwatch and use the Datadog log forwarder lambda to forward the logs to Datadog, see https://docs.datadoghq.com/integrations/ecs_fargate/?tab=logdriver#log-collection.
|
|
15121
15146
|
|
|
@@ -15136,7 +15161,8 @@ Only log to AWS Cloudwatch without forwarding the logs to Datadog.
|
|
|
15136
15161
|
| **Name** | **Description** |
|
|
15137
15162
|
| --- | --- |
|
|
15138
15163
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.fargate.DataDogLoggingMode.AWS_FIRE_LENS">AWS_FIRE_LENS</a></code> | Forward logs directly to Datadog using AWS FireLens as log router, see https://docs.datadoghq.com/integrations/ecs_fargate/?tab=fluentbitandfirelens#log-collection. |
|
|
15139
|
-
| <code><a href="#@rio-cloud/cdk-v2-constructs.fargate.DataDogLoggingMode.FORWARDER_LAMBDA">FORWARDER_LAMBDA</a></code> | Store logs in AWS Cloudwatch and use the Datadog log forwarder lambda to forward the logs to Datadog
|
|
15164
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.fargate.DataDogLoggingMode.FORWARDER_LAMBDA">FORWARDER_LAMBDA</a></code> | Store logs in AWS Cloudwatch and use the RIO customized Datadog log forwarder lambda from the legacy datadog-integration, to forward the logs to Datadog,. |
|
|
15165
|
+
| <code><a href="#@rio-cloud/cdk-v2-constructs.fargate.DataDogLoggingMode.DATADOG_FORWARDER_LAMBDA">DATADOG_FORWARDER_LAMBDA</a></code> | Store logs in AWS Cloudwatch and use the Datadog log forwarder lambda to forward the logs to Datadog, see https://docs.datadoghq.com/integrations/ecs_fargate/?tab=logdriver#log-collection. |
|
|
15140
15166
|
| <code><a href="#@rio-cloud/cdk-v2-constructs.fargate.DataDogLoggingMode.NONE">NONE</a></code> | Only log to AWS Cloudwatch without forwarding the logs to Datadog. |
|
|
15141
15167
|
|
|
15142
15168
|
---
|
|
@@ -15148,7 +15174,18 @@ Forward logs directly to Datadog using AWS FireLens as log router, see https://d
|
|
|
15148
15174
|
---
|
|
15149
15175
|
|
|
15150
15176
|
|
|
15151
|
-
#####
|
|
15177
|
+
##### ~~`FORWARDER_LAMBDA`~~ <a name="FORWARDER_LAMBDA" id="@rio-cloud/cdk-v2-constructs.fargate.DataDogLoggingMode.FORWARDER_LAMBDA"></a>
|
|
15178
|
+
|
|
15179
|
+
- *Deprecated:* use DATADOG_FORWARDER_LAMBDA
|
|
15180
|
+
|
|
15181
|
+
Store logs in AWS Cloudwatch and use the RIO customized Datadog log forwarder lambda from the legacy datadog-integration, to forward the logs to Datadog,.
|
|
15182
|
+
|
|
15183
|
+
> [https://bitbucket.collaboration-man.com/projects/RIODEV/repos/datadog-integration/browse](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/datadog-integration/browse)
|
|
15184
|
+
|
|
15185
|
+
---
|
|
15186
|
+
|
|
15187
|
+
|
|
15188
|
+
##### `DATADOG_FORWARDER_LAMBDA` <a name="DATADOG_FORWARDER_LAMBDA" id="@rio-cloud/cdk-v2-constructs.fargate.DataDogLoggingMode.DATADOG_FORWARDER_LAMBDA"></a>
|
|
15152
15189
|
|
|
15153
15190
|
Store logs in AWS Cloudwatch and use the Datadog log forwarder lambda to forward the logs to Datadog, see https://docs.datadoghq.com/integrations/ecs_fargate/?tab=logdriver#log-collection.
|
|
15154
15191
|
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,21 @@
|
|
|
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
|
+
## [4.28.0](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv4.27.0&sourceBranch=refs%2Ftags%2Fv4.28.0) (2024-02-08)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* add ecs abruptly stopped monitor into the contribution folder ([6f9dc42](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/6f9dc4239c13ba6c6d956bb85444e35d0a27b621))
|
|
11
|
+
* Switched to non blocking configuration in case of firelens ([0eebbd8](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/0eebbd8a8bd769d6911f9ab02f499148aeff7e1f))
|
|
12
|
+
|
|
13
|
+
## [4.27.0](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv4.26.0&sourceBranch=refs%2Ftags%2Fv4.27.0) (2024-02-07)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Features
|
|
17
|
+
|
|
18
|
+
* add support for datadog managed log forwarder ([e42b36b](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/e42b36b2467015ac4527d3e6122e0d934debb675))
|
|
19
|
+
|
|
5
20
|
## [4.26.0](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv4.25.0&sourceBranch=refs%2Ftags%2Fv4.26.0) (2024-02-06)
|
|
6
21
|
|
|
7
22
|
|
package/README.md
CHANGED
|
@@ -22,6 +22,9 @@ $ npm install --save @rio-cloud/cdk-v2-constructs
|
|
|
22
22
|
* [Changelog](./CHANGELOG.md)
|
|
23
23
|
* [brief API desciption](./API.md)
|
|
24
24
|
|
|
25
|
+
## Internal documentation for library devs
|
|
26
|
+
[Documentation](./developers-readme.md)
|
|
27
|
+
|
|
25
28
|
## FAQ's
|
|
26
29
|
- How can I udpate the thresholds of monitors created by watchful?
|
|
27
30
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Documentation for developers
|
|
2
|
+
|
|
3
|
+
This documentation is intended for the library devs
|
|
4
|
+
|
|
5
|
+
## Firelens non blocking configuration
|
|
6
|
+
|
|
7
|
+
Firelens logging configured with fargate is using fluentbit under the hood. For making the setup fault tolerant, we are aiming to make the logging setup non-blocking.
|
|
8
|
+
This means that if for some reason the central logging server (Datadog) is not available, the application should not stop working because of that.
|
|
9
|
+
|
|
10
|
+
More details about the setup can found under these links:
|
|
11
|
+
|
|
12
|
+
https://aws.amazon.com/blogs/containers/preventing-log-loss-with-non-blocking-mode-in-the-awslogs-container-log-driver/
|
|
13
|
+
|
|
14
|
+
https://aws.amazon.com/blogs/containers/choosing-container-logging-options-to-avoid-backpressure/
|
|
15
|
+
|
|
16
|
+
Since the setup needs custom config, we are using a central config file stored in s3. To make this happen, we are using special init firelens docker images. More details can be found under [here](https://github.com/aws/aws-for-fluent-bit/blob/mainline/use_cases/init-process-for-fluent-bit/README.md)
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import * as constructs from 'constructs';
|
|
2
2
|
import { DatadogOrganization } from '../../../datadog';
|
|
3
3
|
import { DatadogAlertType } from '../../../datadog/datadog-monitor';
|
|
4
|
+
import { INotification } from '../../../datadogv2';
|
|
4
5
|
export interface DatadogUsageMonitoringProps {
|
|
5
6
|
readonly serviceName: string;
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated not supported anymore. use `notification` instead.
|
|
9
|
+
*/
|
|
6
10
|
readonly alertType?: DatadogAlertType;
|
|
11
|
+
readonly notification?: INotification;
|
|
7
12
|
readonly organization: DatadogOrganization;
|
|
8
13
|
}
|
|
9
14
|
/**
|
|
@@ -4,10 +4,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.DatadogUsageMonitoring = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
const path = require("path");
|
|
7
|
-
const ssm = require("aws-cdk-lib/aws-ssm");
|
|
8
7
|
const constructs = require("constructs");
|
|
9
8
|
const datadog_1 = require("../../../datadog");
|
|
10
|
-
const
|
|
9
|
+
const datadogv2_1 = require("../../../datadogv2");
|
|
11
10
|
const rio_claidometer_1 = require("../../../rio-claidometer");
|
|
12
11
|
/**
|
|
13
12
|
* This is a beta construct and is likely to have breaking changes.
|
|
@@ -16,7 +15,6 @@ const rio_claidometer_1 = require("../../../rio-claidometer");
|
|
|
16
15
|
class DatadogUsageMonitoring extends constructs.Construct {
|
|
17
16
|
constructor(scope, id, props) {
|
|
18
17
|
super(scope, id);
|
|
19
|
-
const teamName = ssm.StringParameter.fromStringParameterName(this, 'TeamName', '/config/team/name').stringValue;
|
|
20
18
|
const infrastructureUsageSpikeMonitors = [
|
|
21
19
|
{
|
|
22
20
|
humanReadableName: 'infrastructure hosts',
|
|
@@ -106,34 +104,29 @@ class DatadogUsageMonitoring extends constructs.Construct {
|
|
|
106
104
|
query: 'sum:datadog.estimated_usage.serverless.aws_lambda_functions{*} by {child_org_name}',
|
|
107
105
|
},
|
|
108
106
|
];
|
|
107
|
+
const notification = props.notification ?? new datadogv2_1.DefaultSlackNotification();
|
|
109
108
|
for (const usageSpikeMonitor of [].concat(infrastructureUsageSpikeMonitors, logManagementUsageSpikeMonitors, apmUsageSpikeMonitors, serverlessUsageSpikeMonitors, syntheticUsageSpikeMonitors)) {
|
|
110
|
-
this.createAnomalyMonitorForSpikes(props.serviceName,
|
|
109
|
+
this.createAnomalyMonitorForSpikes(props.serviceName, usageSpikeMonitor, notification);
|
|
111
110
|
}
|
|
112
111
|
if (props.organization === 'EU') {
|
|
113
112
|
addClaidometer(this);
|
|
114
113
|
}
|
|
115
114
|
}
|
|
116
|
-
createAnomalyMonitorForSpikes(serviceName,
|
|
117
|
-
return new
|
|
115
|
+
createAnomalyMonitorForSpikes(serviceName, usageSpikeMonitor, notification) {
|
|
116
|
+
return new datadogv2_1.DatadogMonitor(this, usageSpikeMonitor.humanReadableName, {
|
|
117
|
+
name: `${usageSpikeMonitor.humanReadableName} spike`,
|
|
118
118
|
serviceName,
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
trigger_window: 'last_30m',
|
|
130
|
-
recovery_window: 'last_15m',
|
|
131
|
-
},
|
|
119
|
+
notification,
|
|
120
|
+
message: `[P4] ${usageSpikeMonitor.humanReadableName} are getting out-of-control. ${usageSpikeMonitor.additionalMessage ?? ''}`,
|
|
121
|
+
monitorType: datadogv2_1.DatadogMonitorQueryAlertType.QUERY_ALERT,
|
|
122
|
+
query: `avg(last_12h):anomalies(${usageSpikeMonitor.query}, 'agile', 3, direction='above', interval=120, alert_window='last_30m', seasonality='weekly', timezone='europe/berlin', count_default_zero='true') >= 1`,
|
|
123
|
+
optionOverrides: {
|
|
124
|
+
includeTags: false,
|
|
125
|
+
notifyNoData: false,
|
|
126
|
+
thresholdWindows: {
|
|
127
|
+
triggerWindow: 'last_30m',
|
|
128
|
+
recoveryWindow: 'last_15m',
|
|
132
129
|
},
|
|
133
|
-
tags: [
|
|
134
|
-
`service:${serviceName}`,
|
|
135
|
-
`team:${teamName}`,
|
|
136
|
-
],
|
|
137
130
|
},
|
|
138
131
|
});
|
|
139
132
|
}
|
|
@@ -150,4 +143,4 @@ function addClaidometer(scope) {
|
|
|
150
143
|
version: '0.0.8',
|
|
151
144
|
});
|
|
152
145
|
}
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy11c2FnZS1tb25pdG9yaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvdGVhbS1jbGFpZC9kYXRhZG9nLXVzYWdlLW1vbml0b3JpbmcvZGF0YWRvZy11c2FnZS1tb25pdG9yaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkJBQTZCO0FBQzdCLDJDQUEyQztBQUMzQyx5Q0FBeUM7QUFDekMsOENBQWlGO0FBQ2pGLHNFQUFvRjtBQUNwRiw4REFBMkU7QUFjM0U7OztHQUdHO0FBQ0gsTUFBYSxzQkFBdUIsU0FBUSxVQUFVLENBQUMsU0FBUztJQUM5RCxZQUFZLEtBQTJCLEVBQUUsRUFBVSxFQUFFLEtBQWtDO1FBQ3JGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUMsV0FBVyxDQUFDO1FBRWhILE1BQU0sZ0NBQWdDLEdBQXdCO1lBQzVEO2dCQUNFLGlCQUFpQixFQUFFLHNCQUFzQjtnQkFDekMsS0FBSyxFQUFFLHNDQUFzQzthQUM5QztZQUNEO2dCQUNFLGlCQUFpQixFQUFFLG9EQUFvRDtnQkFDdkUsS0FBSyxFQUFFLDBEQUEwRDthQUNsRTtZQUNELEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSwwQ0FBMEMsRUFBRTtZQUN6RixFQUFFLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxrQ0FBa0MsRUFBRTtZQUMxRjtnQkFDRSxpQkFBaUIsRUFBRSxnQkFBZ0I7Z0JBQ25DLEtBQUssRUFBRSwrQ0FBK0M7YUFDdkQ7WUFDRDtnQkFDRSxpQkFBaUIsRUFBRSw4Q0FBOEM7Z0JBQ2pFLEtBQUssRUFBRSxtRUFBbUU7YUFDM0U7U0FDRixDQUFDO1FBRUYs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KiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgc3NtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IERhdGFkb2dPcmdhbml6YXRpb24sIGdldE9yZ2FuaXphdGlvblVybFByZWZpeCB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2cnO1xuaW1wb3J0IHsgRGF0YWRvZ0FsZXJ0VHlwZSwgRGF0YWRvZ01vbml0b3IgfSBmcm9tICcuLi8uLi8uLi9kYXRhZG9nL2RhdGFkb2ctbW9uaXRvcic7XG5pbXBvcnQgeyBDbGFpZG9tZXRlciwgQ2xhaWRvbWV0ZXJQcm9kdWN0IH0gZnJvbSAnLi4vLi4vLi4vcmlvLWNsYWlkb21ldGVyJztcblxuaW50ZXJmYWNlIFVzYWdlU3Bpa2VNb25pdG9yIHtcbiAgaHVtYW5SZWFkYWJsZU5hbWU6IHN0cmluZztcbiAgcXVlcnk6IHN0cmluZztcbiAgYWRkaXRpb25hbE1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWRvZ1VzYWdlTW9uaXRvcmluZ1Byb3BzIHtcbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgYWxlcnRUeXBlPzogRGF0YWRvZ0FsZXJ0VHlwZTtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uOiBEYXRhZG9nT3JnYW5pemF0aW9uO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgYSBiZXRhIGNvbnN0cnVjdCBhbmQgaXMgbGlrZWx5IHRvIGhhdmUgYnJlYWtpbmcgY2hhbmdlcy5cbiAqIFRoZSBjb25zdHJ1Y3QgY3JlYXRlcyBtb25pdG9yaW5nIChiYXNlZCBvbiBhbm9tYWx5IGRldGVjdGlvbikgZm9yIHRoZSB1c2FnZSBvZiB0aGUgbW9zdCByZWxldmFudCBEYXRhZG9nIHJlc291cmNlc1xuICovXG5leHBvcnQgY2xhc3MgRGF0YWRvZ1VzYWdlTW9uaXRvcmluZyBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ1VzYWdlTW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHRlYW1OYW1lID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZSh0aGlzLCAnVGVhbU5hbWUnLCAnL2NvbmZpZy90ZWFtL25hbWUnKS5zdHJpbmdWYWx1ZTtcblxuICAgIGNvbnN0IGluZnJhc3RydWN0dXJlVXNhZ2VTcGlrZU1vbml0b3JzOiBVc2FnZVNwaWtlTW9uaXRvcltdID0gW1xuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogJ2luZnJhc3RydWN0dXJlIGhvc3RzJyxcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UuaG9zdHN7Kn0nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHVtYW5SZWFkYWJsZU5hbWU6IFwiaW5mcmFzdHJ1Y3R1cmUgaG9zdHMgZm9yICd7e2NoaWxkX29yZ19uYW1lLm5hbWV9fSdcIixcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UuaG9zdHN7Kn0gYnkge2NoaWxkX29yZ19uYW1lfScsXG4gICAgICB9LFxuICAgICAgeyBodW1hblJlYWRhYmxlTmFtZTogJ0ZhcmdhdGUgdGFza3MnLCBxdWVyeTogJ3N1bTpkYXRhZG9nLmFwbS5mYXJnYXRlX3Rhc2tfaW5zdGFuY2V7Kn0nIH0sXG4gICAgICB7IGh1bWFuUmVhZGFibGVOYW1lOiAncHJvZmlsZWQgRmFyZ2F0ZSB0YXNrcycsIHF1ZXJ5OiAnc3VtOmRhdGFkb2cucHJvZmlsaW5nLmZhcmdhdGV7Kn0nIH0sXG4gICAgICB7XG4gICAgICAgIGh1bWFuUmVhZGFibGVOYW1lOiAnY3VzdG9tIG1ldHJpY3MnLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5tZXRyaWNzLmN1c3RvbXsqfScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogXCJjdXN0b20gbWV0cmljcyBmb3IgJ3t7Y2hpbGRfb3JnX25hbWUubmFtZX19J1wiLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5tZXRyaWNzLmN1c3RvbXsqfSBieSB7Y2hpbGRfb3JnX25hbWV9JyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IGFkZGl0aW9uYWxNZXNzYWdlTG9nTWFuYWdlbWVudEZvckdsb2JhbGx5U2NvcGVkTW9uaXRvcnMgPSBgVGFrZSBhIGxvb2sgYXQgaHR0cHM6Ly8ke2dldE9yZ2FuaXphdGlvblVybFByZWZpeChcbiAgICAgIHByb3BzLm9yZ2FuaXphdGlvbixcbiAgICApfS5kYXRhZG9naHEuZXUvZGFzaC9pbnRlZ3JhdGlvbi80NjUvbG9nLW1hbmFnZW1lbnQtZXN0aW1hdGVkLXVzYWdlIGZvciBtb3JlIGRldGFpbHMuYDtcbiAgICBjb25zdCBhZGRpdGlvbmFsTWVzc2FnZUxvZ01hbmFnZW1lbnRGb3JMb2dJbmRleFNjb3BlZE1vbml0b3JzID0gYFRha2UgYSBsb29rIGF0IGh0dHBzOi8vJHtnZXRPcmdhbml6YXRpb25VcmxQcmVmaXgoXG4gICAgICBwcm9wcy5vcmdhbml6YXRpb24sXG4gICAgKX0uZGF0YWRvZ2hxLmV1L2Rhc2gvaW50ZWdyYXRpb24vNDY1L2xvZy1tYW5hZ2VtZW50LWVzdGltYXRlZC11c2FnZT90cGxfdmFyX2RhdGFkb2dfaW5kZXg9e3tkYXRhZG9nX2luZGV4Lm5hbWV9fSBmb3IgbW9yZSBkZXRhaWxzLmA7XG4gICAgY29uc3QgbG9nTWFuYWdlbWVudFVzYWdlU3Bpa2VNb25pdG9yczogVXNhZ2VTcGlrZU1vbml0b3JbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgaHVtYW5SZWFkYWJsZU5hbWU6ICdsb2cgaW5nZXN0aW9uJyxcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UubG9ncy5pbmdlc3RlZF9ieXRlc3sqfS5hc19jb3VudCgpJyxcbiAgICAgICAgYWRkaXRpb25hbE1lc3NhZ2U6IGFkZGl0aW9uYWxNZXNzYWdlTG9nTWFuYWdlbWVudEZvckdsb2JhbGx5U2NvcGVkTW9uaXRvcnMsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogXCJsb2cgaW5nZXN0aW9uIGZvciAne3tkYXRhZG9nX2luZGV4Lm5hbWV9fSdcIixcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UubG9ncy5pbmdlc3RlZF9ieXRlc3sqfSBieSB7ZGF0YWRvZ19pbmRleH0uYXNfY291bnQoKScsXG4gICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlOiBhZGRpdGlvbmFsTWVzc2FnZUxvZ01hbmFnZW1lbnRGb3JMb2dJbmRleFNjb3BlZE1vbml0b3JzLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHVtYW5SZWFkYWJsZU5hbWU6ICdsb2cgaW5kZXhpbmcnLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5sb2dzLmluZ2VzdGVkX2V2ZW50c3tkYXRhZG9nX2lzX2V4Y2x1ZGVkOmZhbHNlfS5hc19jb3VudCgpJyxcbiAgICAgICAgYWRkaXRpb25hbE1lc3NhZ2U6IGFkZGl0aW9uYWxNZXNzYWdlTG9nTWFuYWdlbWVudEZvckdsb2JhbGx5U2NvcGVkTW9uaXRvcnMsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogXCJsb2cgaW5kZXhpbmcgZm9yICd7e2RhdGFkb2dfaW5kZXgubmFtZX19J1wiLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5sb2dzLmluZ2VzdGVkX2V2ZW50c3tkYXRhZG9nX2lzX2V4Y2x1ZGVkOmZhbHNlfSBieSB7ZGF0YWRvZ19pbmRleH0uYXNfY291bnQoKScsXG4gICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlOiBhZGRpdGlvbmFsTWVzc2FnZUxvZ01hbmFnZW1lbnRGb3JMb2dJbmRleFNjb3BlZE1vbml0b3JzLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgYWRkaXRpb25hbE1lc3NhZ2VBcG1Gb3JHbG9iYWxseVNjb3BlZE1vbml0b3JzID0gYFRha2UgYSBsb29rIGF0IGh0dHBzOi8vJHtnZXRPcmdhbml6YXRpb25VcmxQcmVmaXgoXG4gICAgICBwcm9wcy5vcmdhbml6YXRpb24sXG4gICAgKX0uZGF0YWRvZ2hxLmV1L2Rhc2gvaW50ZWdyYXRpb24vNDg5L2FwbS10cmFjZXMtZXN0aW1hdGVkLXVzYWdlIGZvciBtb3JlIGRldGFpbHMuYDtcbiAgICBjb25zdCBhZGRpdGlvbmFsTWVzc2FnZUFwbUZvckVudlNjb3BlZE1vbml0b3JzID0gYFRha2UgYSBsb29rIGF0IGh0dHBzOi8vJHtnZXRPcmdhbml6YXRpb25VcmxQcmVmaXgoXG4gICAgICBwcm9wcy5vcmdhbml6YXRpb24sXG4gICAgKX0uZGF0YWRvZ2hxLmV1L2Rhc2gvaW50ZWdyYXRpb24vNDg5L2FwbS10cmFjZXMtZXN0aW1hdGVkLXVzYWdlP3RwbF92YXJfZW52PXt7ZW52Lm5hbWV9fSBmb3IgbW9yZSBkZXRhaWxzLmA7XG4gICAgY29uc3QgYXBtVXNhZ2VTcGlrZU1vbml0b3JzOiBVc2FnZVNwaWtlTW9uaXRvcltdID0gW1xuICAgICAgeyBodW1hblJlYWRhYmxlTmFtZTogJ0FQTSBob3N0cycsIHF1ZXJ5OiAnc3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLmFwbV9ob3N0c3sqfScgfSxcbiAgICAgIHtcbiAgICAgICAgaHVtYW5SZWFkYWJsZU5hbWU6IFwiQVBNIGhvc3RzIGZvciAne3tjaGlsZF9vcmdfbmFtZS5uYW1lfX0nXCIsXG4gICAgICAgIHF1ZXJ5OiAnc3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLmFwbV9ob3N0c3sqfSBieSB7Y2hpbGRfb3JnX25hbWV9JyxcbiAgICAgICAgYWRkaXRpb25hbE1lc3NhZ2U6IGFkZGl0aW9uYWxNZXNzYWdlQXBtRm9yR2xvYmFsbHlTY29wZWRNb25pdG9ycyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGh1bWFuUmVhZGFibGVOYW1lOiAnc3BhbiBpbmdlc3Rpb24nLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5hcG0uaW5nZXN0ZWRfYnl0ZXN7Kn0uYXNfY291bnQoKScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogXCJzcGFuIGluZ2VzdGlvbiBmb3IgJ3t7ZW52Lm5hbWV9fSdcIixcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UuYXBtLmluZ2VzdGVkX2J5dGVzeyp9IGJ5IHtlbnZ9LmFzX2NvdW50KCknLFxuICAgICAgICBhZGRpdGlvbmFsTWVzc2FnZTogYWRkaXRpb25hbE1lc3NhZ2VBcG1Gb3JFbnZTY29wZWRNb25pdG9ycyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGh1bWFuUmVhZGFibGVOYW1lOiAnc3BhbiBpbmRleGluZycsXG4gICAgICAgIHF1ZXJ5OiAnc3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLmFwbS5pbmRleGVkX3NwYW5zeyp9LmFzX2NvdW50KCknLFxuICAgICAgICBhZGRpdGlvbmFsTWVzc2FnZTogYWRkaXRpb25hbE1lc3NhZ2VBcG1Gb3JHbG9iYWxseVNjb3BlZE1vbml0b3JzLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHVtYW5SZWFkYWJsZU5hbWU6IFwic3BhbiBpbmRleGluZyBmb3IgJ3t7ZW52Lm5hbWV9fSdcIixcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UuYXBtLmluZGV4ZWRfc3BhbnN7Kn0gYnkge2Vudn0uYXNfY291bnQoKScsXG4gICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlOiBhZGRpdGlvbmFsTWVzc2FnZUFwbUZvckVudlNjb3BlZE1vbml0b3JzLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3Qgc3ludGhldGljVXNhZ2VTcGlrZU1vbml0b3JzOiBVc2FnZVNwaWtlTW9uaXRvcltdID0gW1xuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogJ1N5bnRoZXRpYyBBUEkgdGVzdHMnLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5zeW50aGV0aWNzLmFwaV90ZXN0X3J1bnN7Kn0uYXNfY291bnQoKScsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCBzZXJ2ZXJsZXNzVXNhZ2VTcGlrZU1vbml0b3JzOiBVc2FnZVNwaWtlTW9uaXRvcltdID0gW1xuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogJ3NlcnZlcmxlc3MgZnVuY3Rpb25zJyxcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2Uuc2VydmVybGVzcy5hd3NfbGFtYmRhX2Z1bmN0aW9uc3sqfScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogXCJzZXJ2ZXJsZXNzIGZ1bmN0aW9ucyBmb3IgJ3t7Y2hpbGRfb3JnX25hbWUubmFtZX19J1wiLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5zZXJ2ZXJsZXNzLmF3c19sYW1iZGFfZnVuY3Rpb25zeyp9IGJ5IHtjaGlsZF9vcmdfbmFtZX0nLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCB1c2FnZVNwaWtlTW9uaXRvciBvZiAoW10gYXMgVXNhZ2VTcGlrZU1vbml0b3JbXSkuY29uY2F0KFxuICAgICAgaW5mcmFzdHJ1Y3R1cmVVc2FnZVNwaWtlTW9uaXRvcnMsXG4gICAgICBsb2dNYW5hZ2VtZW50VXNhZ2VTcGlrZU1vbml0b3JzLFxuICAgICAgYXBtVXNhZ2VTcGlrZU1vbml0b3JzLFxuICAgICAgc2VydmVybGVzc1VzYWdlU3Bpa2VNb25pdG9ycyxcbiAgICAgIHN5bnRoZXRpY1VzYWdlU3Bpa2VNb25pdG9ycyxcbiAgICApKSB7XG4gICAgICB0aGlzLmNyZWF0ZUFub21hbHlNb25pdG9yRm9yU3Bpa2VzKHByb3BzLnNlcnZpY2VOYW1lLCB0ZWFtTmFtZSwgdXNhZ2VTcGlrZU1vbml0b3IsIHByb3BzLmFsZXJ0VHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLm9yZ2FuaXphdGlvbiA9PT0gJ0VVJykge1xuICAgICAgYWRkQ2xhaWRvbWV0ZXIodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBbm9tYWx5TW9uaXRvckZvclNwaWtlcyhcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICAgIHRlYW1OYW1lOiBzdHJpbmcsXG4gICAgdXNhZ2VTcGlrZU1vbml0b3I6IFVzYWdlU3Bpa2VNb25pdG9yLFxuICAgIGFsZXJ0VHlwZT86IERhdGFkb2dBbGVydFR5cGUsXG4gICk6IERhdGFkb2dNb25pdG9yIHtcbiAgICByZXR1cm4gbmV3IERhdGFkb2dNb25pdG9yKHRoaXMsIHVzYWdlU3Bpa2VNb25pdG9yLmh1bWFuUmVhZGFibGVOYW1lLCB7XG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgIGFsZXJ0VHlwZXM6IGFsZXJ0VHlwZSA/IFthbGVydFR5cGVdIDogdW5kZWZpbmVkLFxuICAgICAgbW9uaXRvcjoge1xuICAgICAgICBuYW1lOiBgJHt1c2FnZVNwaWtlTW9uaXRvci5odW1hblJlYWRhYmxlTmFtZX0gc3Bpa2VgLFxuICAgICAgICB0eXBlOiAncXVlcnkgYWxlcnQnLFxuICAgICAgICBxdWVyeTogYGF2ZyhsYXN0XzEyaCk6YW5vbWFsaWVzKCR7dXNhZ2VTcGlrZU1vbml0b3IucXVlcnl9LCAnYWdpbGUnLCAzLCBkaXJlY3Rpb249J2Fib3ZlJywgaW50ZXJ2YWw9MTIwLCBhbGVydF93aW5kb3c9J2xhc3RfMzBtJywgc2Vhc29uYWxpdHk9J3dlZWtseScsIHRpbWV6b25lPSdldXJvcGUvYmVybGluJywgY291bnRfZGVmYXVsdF96ZXJvPSd0cnVlJykgPj0gMWAsXG4gICAgICAgIG1lc3NhZ2U6IGBbUDRdICR7dXNhZ2VTcGlrZU1vbml0b3IuaHVtYW5SZWFkYWJsZU5hbWV9IGFyZSBnZXR0aW5nIG91dC1vZi1jb250cm9sLiAke1xuICAgICAgICAgIHVzYWdlU3Bpa2VNb25pdG9yLmFkZGl0aW9uYWxNZXNzYWdlID8/ICcnXG4gICAgICAgIH1gLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgaW5jbHVkZV90YWdzOiBmYWxzZSxcbiAgICAgICAgICBub3RpZnlfbm9fZGF0YTogZmFsc2UsXG4gICAgICAgICAgdGhyZXNob2xkX3dpbmRvd3M6IHtcbiAgICAgICAgICAgIHRyaWdnZXJfd2luZG93OiAnbGFzdF8zMG0nLFxuICAgICAgICAgICAgcmVjb3Zlcnlfd2luZG93OiAnbGFzdF8xNW0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHRhZ3M6IFtcbiAgICAgICAgICBgc2VydmljZToke3NlcnZpY2VOYW1lfWAsXG4gICAgICAgICAgYHRlYW06JHt0ZWFtTmFtZX1gLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRDbGFpZG9tZXRlcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QpIHtcbiAgY29uc3QgW2ZlYXR1cmUsIHBhY2thZ2VOYW1lXSA9IF9fZGlybmFtZS5zcGxpdChwYXRoLnNlcCkucmV2ZXJzZSgpO1xuICBuZXcgQ2xhaWRvbWV0ZXIoc2NvcGUsICdDbGFpZG9tZXRlcicsIHtcbiAgICBwcm9kdWN0OiBDbGFpZG9tZXRlclByb2R1Y3QuQ0RLX0NPTlRSSUJVVElPTixcbiAgICBwYWNrYWdlTmFtZSxcbiAgICBmZWF0dXJlLFxuICAgIHZlcnNpb246ICcwLjAuOCcsXG4gIH0pO1xufVxuIl19
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy11c2FnZS1tb25pdG9yaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvdGVhbS1jbGFpZC9kYXRhZG9nLXVzYWdlLW1vbml0b3JpbmcvZGF0YWRvZy11c2FnZS1tb25pdG9yaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkJBQTZCO0FBQzdCLHlDQUF5QztBQUN6Qyw4Q0FBaUY7QUFFakYsa0RBQTJIO0FBQzNILDhEQUEyRTtBQWtCM0U7OztHQUdHO0FBQ0gsTUFBYSxzQkFBdUIsU0FBUSxVQUFVLENBQUMsU0FBUztJQUM5RCxZQUFZLEtBQTJCLEVBQUUsRUFBVSxFQUFFLEtBQWtDO1FBQ3JGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxnQ0FBZ0MsR0FBd0I7WUFDNUQ7Z0JBQ0UsaUJBQWlCLEVBQUUsc0JBQXNCO2dCQUN6QyxLQUFLLEVBQUUsc0NBQXNDO2FBQzlDO1lBQ0Q7Z0JBQ0UsaUJBQWlCLEVBQUUsb0RBQW9EO2dCQUN2RSxLQUFLLEVBQUUsMERBQTBEO2FBQ2xFO1lBQ0QsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLDBDQUEwQyxFQUFFO1lBQ3pGLEVBQUUsaUJBQWlCLEVBQUUsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLGtDQUFrQyxFQUFFO1lBQzFGO2dCQUNFLGlCQUFpQixFQUFFLGdCQUFnQjtnQkFDbkMsS0FBSyxFQUFFLCtDQUErQzthQUN2RDtZQUNEO2dCQUNFLGlCQUFpQixFQUFFLDhDQUE4QztnQkFDakUsS0FBSyxFQUFFLG1FQUFtRTthQUMzRTtTQUNGLENBQUM7UUFFRixNQUFNLHVEQUF1RCxHQUFHLDBCQUEwQixJQUFBLGtDQUF3QixFQUNoSCxLQUFLLENBQUMsWUFBWSxDQUNuQixxRkFBcUYsQ0FBQztRQUN2RixNQUFNLHVEQUF1RCxHQUFHLDBCQUEwQixJQUFBLGtD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aUJBQWlCLENBQUMsaUJBQWlCLFFBQVE7WUFDcEQsV0FBVztZQUNYLFlBQVk7WUFDWixPQUFPLEVBQUUsUUFBUSxpQkFBaUIsQ0FBQyxpQkFBaUIsZ0NBQ2xELGlCQUFpQixDQUFDLGlCQUFpQixJQUFJLEVBQ3pDLEVBQUU7WUFDRixXQUFXLEVBQUUsd0NBQTRCLENBQUMsV0FBVztZQUNyRCxLQUFLLEVBQUUsMkJBQTJCLGlCQUFpQixDQUFDLEtBQUsseUpBQXlKO1lBQ2xOLGVBQWUsRUFBRTtnQkFDZixXQUFXLEVBQUUsS0FBSztnQkFDbEIsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLGdCQUFnQixFQUFFO29CQUNoQixhQUFhLEVBQUUsVUFBVTtvQkFDekIsY0FBYyxFQUFFLFVBQVU7aUJBQzNCO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQWpKSCx3REFrSkM7OztBQUVELFNBQVMsY0FBYyxDQUFDLEtBQTJCO0lBQ2pELE1BQU0sQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkUsSUFBSSw2QkFBVyxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUU7UUFDcEMsT0FBTyxFQUFFLG9DQUFrQixDQUFDLGdCQUFnQjtRQUM1QyxXQUFXO1FBQ1gsT0FBTztRQUNQLE9BQU8sRUFBRSxPQUFPO0tBQ2pCLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IERhdGFkb2dPcmdhbml6YXRpb24sIGdldE9yZ2FuaXphdGlvblVybFByZWZpeCB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2cnO1xuaW1wb3J0IHsgRGF0YWRvZ0FsZXJ0VHlwZSB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2cvZGF0YWRvZy1tb25pdG9yJztcbmltcG9ydCB7IElOb3RpZmljYXRpb24sIERlZmF1bHRTbGFja05vdGlmaWNhdGlvbiwgRGF0YWRvZ01vbml0b3IsIERhdGFkb2dNb25pdG9yUXVlcnlBbGVydFR5cGUgfSBmcm9tICcuLi8uLi8uLi9kYXRhZG9ndjInO1xuaW1wb3J0IHsgQ2xhaWRvbWV0ZXIsIENsYWlkb21ldGVyUHJvZHVjdCB9IGZyb20gJy4uLy4uLy4uL3Jpby1jbGFpZG9tZXRlcic7XG5cbmludGVyZmFjZSBVc2FnZVNwaWtlTW9uaXRvciB7XG4gIGh1bWFuUmVhZGFibGVOYW1lOiBzdHJpbmc7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIGFkZGl0aW9uYWxNZXNzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFkb2dVc2FnZU1vbml0b3JpbmdQcm9wcyB7XG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBub3Qgc3VwcG9ydGVkIGFueW1vcmUuIHVzZSBgbm90aWZpY2F0aW9uYCBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxlcnRUeXBlPzogRGF0YWRvZ0FsZXJ0VHlwZTtcbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uPzogSU5vdGlmaWNhdGlvbjtcbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uOiBEYXRhZG9nT3JnYW5pemF0aW9uO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgYSBiZXRhIGNvbnN0cnVjdCBhbmQgaXMgbGlrZWx5IHRvIGhhdmUgYnJlYWtpbmcgY2hhbmdlcy5cbiAqIFRoZSBjb25zdHJ1Y3QgY3JlYXRlcyBtb25pdG9yaW5nIChiYXNlZCBvbiBhbm9tYWx5IGRldGVjdGlvbikgZm9yIHRoZSB1c2FnZSBvZiB0aGUgbW9zdCByZWxldmFudCBEYXRhZG9nIHJlc291cmNlc1xuICovXG5leHBvcnQgY2xhc3MgRGF0YWRvZ1VzYWdlTW9uaXRvcmluZyBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ1VzYWdlTW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGluZnJhc3RydWN0dXJlVXNhZ2VTcGlrZU1vbml0b3JzOiBVc2FnZVNwaWtlTW9uaXRvcltdID0gW1xuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogJ2luZnJhc3RydWN0dXJlIGhvc3RzJyxcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UuaG9zdHN7Kn0nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHVtYW5SZWFkYWJsZU5hbWU6IFwiaW5mcmFzdHJ1Y3R1cmUgaG9zdHMgZm9yICd7e2NoaWxkX29yZ19uYW1lLm5hbWV9fSdcIixcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UuaG9zdHN7Kn0gYnkge2NoaWxkX29yZ19uYW1lfScsXG4gICAgICB9LFxuICAgICAgeyBodW1hblJlYWRhYmxlTmFtZTogJ0ZhcmdhdGUgdGFza3MnLCBxdWVyeTogJ3N1bTpkYXRhZG9nLmFwbS5mYXJnYXRlX3Rhc2tfaW5zdGFuY2V7Kn0nIH0sXG4gICAgICB7IGh1bWFuUmVhZGFibGVOYW1lOiAncHJvZmlsZWQgRmFyZ2F0ZSB0YXNrcycsIHF1ZXJ5OiAnc3VtOmRhdGFkb2cucHJvZmlsaW5nLmZhcmdhdGV7Kn0nIH0sXG4gICAgICB7XG4gICAgICAgIGh1bWFuUmVhZGFibGVOYW1lOiAnY3VzdG9tIG1ldHJpY3MnLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5tZXRyaWNzLmN1c3RvbXsqfScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogXCJjdXN0b20gbWV0cmljcyBmb3IgJ3t7Y2hpbGRfb3JnX25hbWUubmFtZX19J1wiLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5tZXRyaWNzLmN1c3RvbXsqfSBieSB7Y2hpbGRfb3JnX25hbWV9JyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IGFkZGl0aW9uYWxNZXNzYWdlTG9nTWFuYWdlbWVudEZvckdsb2JhbGx5U2NvcGVkTW9uaXRvcnMgPSBgVGFrZSBhIGxvb2sgYXQgaHR0cHM6Ly8ke2dldE9yZ2FuaXphdGlvblVybFByZWZpeChcbiAgICAgIHByb3BzLm9yZ2FuaXphdGlvbixcbiAgICApfS5kYXRhZG9naHEuZXUvZGFzaC9pbnRlZ3JhdGlvbi80NjUvbG9nLW1hbmFnZW1lbnQtZXN0aW1hdGVkLXVzYWdlIGZvciBtb3JlIGRldGFpbHMuYDtcbiAgICBjb25zdCBhZGRpdGlvbmFsTWVzc2FnZUxvZ01hbmFnZW1lbnRGb3JMb2dJbmRleFNjb3BlZE1vbml0b3JzID0gYFRha2UgYSBsb29rIGF0IGh0dHBzOi8vJHtnZXRPcmdhbml6YXRpb25VcmxQcmVmaXgoXG4gICAgICBwcm9wcy5vcmdhbml6YXRpb24sXG4gICAgKX0uZGF0YWRvZ2hxLmV1L2Rhc2gvaW50ZWdyYXRpb24vNDY1L2xvZy1tYW5hZ2VtZW50LWVzdGltYXRlZC11c2FnZT90cGxfdmFyX2RhdGFkb2dfaW5kZXg9e3tkYXRhZG9nX2luZGV4Lm5hbWV9fSBmb3IgbW9yZSBkZXRhaWxzLmA7XG4gICAgY29uc3QgbG9nTWFuYWdlbWVudFVzYWdlU3Bpa2VNb25pdG9yczogVXNhZ2VTcGlrZU1vbml0b3JbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgaHVtYW5SZWFkYWJsZU5hbWU6ICdsb2cgaW5nZXN0aW9uJyxcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UubG9ncy5pbmdlc3RlZF9ieXRlc3sqfS5hc19jb3VudCgpJyxcbiAgICAgICAgYWRkaXRpb25hbE1lc3NhZ2U6IGFkZGl0aW9uYWxNZXNzYWdlTG9nTWFuYWdlbWVudEZvckdsb2JhbGx5U2NvcGVkTW9uaXRvcnMsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogXCJsb2cgaW5nZXN0aW9uIGZvciAne3tkYXRhZG9nX2luZGV4Lm5hbWV9fSdcIixcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UubG9ncy5pbmdlc3RlZF9ieXRlc3sqfSBieSB7ZGF0YWRvZ19pbmRleH0uYXNfY291bnQoKScsXG4gICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlOiBhZGRpdGlvbmFsTWVzc2FnZUxvZ01hbmFnZW1lbnRGb3JMb2dJbmRleFNjb3BlZE1vbml0b3JzLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHVtYW5SZWFkYWJsZU5hbWU6ICdsb2cgaW5kZXhpbmcnLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5sb2dzLmluZ2VzdGVkX2V2ZW50c3tkYXRhZG9nX2lzX2V4Y2x1ZGVkOmZhbHNlfS5hc19jb3VudCgpJyxcbiAgICAgICAgYWRkaXRpb25hbE1lc3NhZ2U6IGFkZGl0aW9uYWxNZXNzYWdlTG9nTWFuYWdlbWVudEZvckdsb2JhbGx5U2NvcGVkTW9uaXRvcnMsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogXCJsb2cgaW5kZXhpbmcgZm9yICd7e2RhdGFkb2dfaW5kZXgubmFtZX19J1wiLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5sb2dzLmluZ2VzdGVkX2V2ZW50c3tkYXRhZG9nX2lzX2V4Y2x1ZGVkOmZhbHNlfSBieSB7ZGF0YWRvZ19pbmRleH0uYXNfY291bnQoKScsXG4gICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlOiBhZGRpdGlvbmFsTWVzc2FnZUxvZ01hbmFnZW1lbnRGb3JMb2dJbmRleFNjb3BlZE1vbml0b3JzLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgYWRkaXRpb25hbE1lc3NhZ2VBcG1Gb3JHbG9iYWxseVNjb3BlZE1vbml0b3JzID0gYFRha2UgYSBsb29rIGF0IGh0dHBzOi8vJHtnZXRPcmdhbml6YXRpb25VcmxQcmVmaXgoXG4gICAgICBwcm9wcy5vcmdhbml6YXRpb24sXG4gICAgKX0uZGF0YWRvZ2hxLmV1L2Rhc2gvaW50ZWdyYXRpb24vNDg5L2FwbS10cmFjZXMtZXN0aW1hdGVkLXVzYWdlIGZvciBtb3JlIGRldGFpbHMuYDtcbiAgICBjb25zdCBhZGRpdGlvbmFsTWVzc2FnZUFwbUZvckVudlNjb3BlZE1vbml0b3JzID0gYFRha2UgYSBsb29rIGF0IGh0dHBzOi8vJHtnZXRPcmdhbml6YXRpb25VcmxQcmVmaXgoXG4gICAgICBwcm9wcy5vcmdhbml6YXRpb24sXG4gICAgKX0uZGF0YWRvZ2hxLmV1L2Rhc2gvaW50ZWdyYXRpb24vNDg5L2FwbS10cmFjZXMtZXN0aW1hdGVkLXVzYWdlP3RwbF92YXJfZW52PXt7ZW52Lm5hbWV9fSBmb3IgbW9yZSBkZXRhaWxzLmA7XG4gICAgY29uc3QgYXBtVXNhZ2VTcGlrZU1vbml0b3JzOiBVc2FnZVNwaWtlTW9uaXRvcltdID0gW1xuICAgICAgeyBodW1hblJlYWRhYmxlTmFtZTogJ0FQTSBob3N0cycsIHF1ZXJ5OiAnc3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLmFwbV9ob3N0c3sqfScgfSxcbiAgICAgIHtcbiAgICAgICAgaHVtYW5SZWFkYWJsZU5hbWU6IFwiQVBNIGhvc3RzIGZvciAne3tjaGlsZF9vcmdfbmFtZS5uYW1lfX0nXCIsXG4gICAgICAgIHF1ZXJ5OiAnc3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLmFwbV9ob3N0c3sqfSBieSB7Y2hpbGRfb3JnX25hbWV9JyxcbiAgICAgICAgYWRkaXRpb25hbE1lc3NhZ2U6IGFkZGl0aW9uYWxNZXNzYWdlQXBtRm9yR2xvYmFsbHlTY29wZWRNb25pdG9ycyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGh1bWFuUmVhZGFibGVOYW1lOiAnc3BhbiBpbmdlc3Rpb24nLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5hcG0uaW5nZXN0ZWRfYnl0ZXN7Kn0uYXNfY291bnQoKScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogXCJzcGFuIGluZ2VzdGlvbiBmb3IgJ3t7ZW52Lm5hbWV9fSdcIixcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UuYXBtLmluZ2VzdGVkX2J5dGVzeyp9IGJ5IHtlbnZ9LmFzX2NvdW50KCknLFxuICAgICAgICBhZGRpdGlvbmFsTWVzc2FnZTogYWRkaXRpb25hbE1lc3NhZ2VBcG1Gb3JFbnZTY29wZWRNb25pdG9ycyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGh1bWFuUmVhZGFibGVOYW1lOiAnc3BhbiBpbmRleGluZycsXG4gICAgICAgIHF1ZXJ5OiAnc3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLmFwbS5pbmRleGVkX3NwYW5zeyp9LmFzX2NvdW50KCknLFxuICAgICAgICBhZGRpdGlvbmFsTWVzc2FnZTogYWRkaXRpb25hbE1lc3NhZ2VBcG1Gb3JHbG9iYWxseVNjb3BlZE1vbml0b3JzLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaHVtYW5SZWFkYWJsZU5hbWU6IFwic3BhbiBpbmRleGluZyBmb3IgJ3t7ZW52Lm5hbWV9fSdcIixcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UuYXBtLmluZGV4ZWRfc3BhbnN7Kn0gYnkge2Vudn0uYXNfY291bnQoKScsXG4gICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlOiBhZGRpdGlvbmFsTWVzc2FnZUFwbUZvckVudlNjb3BlZE1vbml0b3JzLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3Qgc3ludGhldGljVXNhZ2VTcGlrZU1vbml0b3JzOiBVc2FnZVNwaWtlTW9uaXRvcltdID0gW1xuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogJ1N5bnRoZXRpYyBBUEkgdGVzdHMnLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5zeW50aGV0aWNzLmFwaV90ZXN0X3J1bnN7Kn0uYXNfY291bnQoKScsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCBzZXJ2ZXJsZXNzVXNhZ2VTcGlrZU1vbml0b3JzOiBVc2FnZVNwaWtlTW9uaXRvcltdID0gW1xuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogJ3NlcnZlcmxlc3MgZnVuY3Rpb25zJyxcbiAgICAgICAgcXVlcnk6ICdzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2Uuc2VydmVybGVzcy5hd3NfbGFtYmRhX2Z1bmN0aW9uc3sqfScsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBodW1hblJlYWRhYmxlTmFtZTogXCJzZXJ2ZXJsZXNzIGZ1bmN0aW9ucyBmb3IgJ3t7Y2hpbGRfb3JnX25hbWUubmFtZX19J1wiLFxuICAgICAgICBxdWVyeTogJ3N1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5zZXJ2ZXJsZXNzLmF3c19sYW1iZGFfZnVuY3Rpb25zeyp9IGJ5IHtjaGlsZF9vcmdfbmFtZX0nLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uID0gcHJvcHMubm90aWZpY2F0aW9uID8/IG5ldyBEZWZhdWx0U2xhY2tOb3RpZmljYXRpb24oKTtcbiAgICBmb3IgKGNvbnN0IHVzYWdlU3Bpa2VNb25pdG9yIG9mIChbXSBhcyBVc2FnZVNwaWtlTW9uaXRvcltdKS5jb25jYXQoXG4gICAgICBpbmZyYXN0cnVjdHVyZVVzYWdlU3Bpa2VNb25pdG9ycyxcbiAgICAgIGxvZ01hbmFnZW1lbnRVc2FnZVNwaWtlTW9uaXRvcnMsXG4gICAgICBhcG1Vc2FnZVNwaWtlTW9uaXRvcnMsXG4gICAgICBzZXJ2ZXJsZXNzVXNhZ2VTcGlrZU1vbml0b3JzLFxuICAgICAgc3ludGhldGljVXNhZ2VTcGlrZU1vbml0b3JzLFxuICAgICkpIHtcbiAgICAgIHRoaXMuY3JlYXRlQW5vbWFseU1vbml0b3JGb3JTcGlrZXMocHJvcHMuc2VydmljZU5hbWUsIHVzYWdlU3Bpa2VNb25pdG9yLCBub3RpZmljYXRpb24pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5vcmdhbml6YXRpb24gPT09ICdFVScpIHtcbiAgICAgIGFkZENsYWlkb21ldGVyKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQW5vbWFseU1vbml0b3JGb3JTcGlrZXMoXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgICB1c2FnZVNwaWtlTW9uaXRvcjogVXNhZ2VTcGlrZU1vbml0b3IsXG4gICAgbm90aWZpY2F0aW9uOiBJTm90aWZpY2F0aW9uLFxuICApOiBEYXRhZG9nTW9uaXRvciB7XG4gICAgcmV0dXJuIG5ldyBEYXRhZG9nTW9uaXRvcih0aGlzLCB1c2FnZVNwaWtlTW9uaXRvci5odW1hblJlYWRhYmxlTmFtZSwge1xuICAgICAgbmFtZTogYCR7dXNhZ2VTcGlrZU1vbml0b3IuaHVtYW5SZWFkYWJsZU5hbWV9IHNwaWtlYCxcbiAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgbm90aWZpY2F0aW9uLFxuICAgICAgbWVzc2FnZTogYFtQNF0gJHt1c2FnZVNwaWtlTW9uaXRvci5odW1hblJlYWRhYmxlTmFtZX0gYXJlIGdldHRpbmcgb3V0LW9mLWNvbnRyb2wuICR7XG4gICAgICAgIHVzYWdlU3Bpa2VNb25pdG9yLmFkZGl0aW9uYWxNZXNzYWdlID8/ICcnXG4gICAgICB9YCxcbiAgICAgIG1vbml0b3JUeXBlOiBEYXRhZG9nTW9uaXRvclF1ZXJ5QWxlcnRUeXBlLlFVRVJZX0FMRVJULFxuICAgICAgcXVlcnk6IGBhdmcobGFzdF8xMmgpOmFub21hbGllcygke3VzYWdlU3Bpa2VNb25pdG9yLnF1ZXJ5fSwgJ2FnaWxlJywgMywgZGlyZWN0aW9uPSdhYm92ZScsIGludGVydmFsPTEyMCwgYWxlcnRfd2luZG93PSdsYXN0XzMwbScsIHNlYXNvbmFsaXR5PSd3ZWVrbHknLCB0aW1lem9uZT0nZXVyb3BlL2JlcmxpbicsIGNvdW50X2RlZmF1bHRfemVybz0ndHJ1ZScpID49IDFgLFxuICAgICAgb3B0aW9uT3ZlcnJpZGVzOiB7XG4gICAgICAgIGluY2x1ZGVUYWdzOiBmYWxzZSxcbiAgICAgICAgbm90aWZ5Tm9EYXRhOiBmYWxzZSxcbiAgICAgICAgdGhyZXNob2xkV2luZG93czoge1xuICAgICAgICAgIHRyaWdnZXJXaW5kb3c6ICdsYXN0XzMwbScsXG4gICAgICAgICAgcmVjb3ZlcnlXaW5kb3c6ICdsYXN0XzE1bScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZENsYWlkb21ldGVyKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCkge1xuICBjb25zdCBbZmVhdHVyZSwgcGFja2FnZU5hbWVdID0gX19kaXJuYW1lLnNwbGl0KHBhdGguc2VwKS5yZXZlcnNlKCk7XG4gIG5ldyBDbGFpZG9tZXRlcihzY29wZSwgJ0NsYWlkb21ldGVyJywge1xuICAgIHByb2R1Y3Q6IENsYWlkb21ldGVyUHJvZHVjdC5DREtfQ09OVFJJQlVUSU9OLFxuICAgIHBhY2thZ2VOYW1lLFxuICAgIGZlYXR1cmUsXG4gICAgdmVyc2lvbjogJzAuMC44JyxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
import { INotification } from '../../../datadogv2';
|
|
3
|
+
export interface EcsAbruptlyStoppedMonitorProps {
|
|
4
|
+
serviceName: string;
|
|
5
|
+
notification: INotification;
|
|
6
|
+
/**
|
|
7
|
+
* ARN of the cluster that should be monitored.
|
|
8
|
+
* If no cluster is provided, all ECS will be part of the monitor.
|
|
9
|
+
*/
|
|
10
|
+
clusterArn?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* # WARNING: This construct is still on beta phase.
|
|
14
|
+
*
|
|
15
|
+
* The construct creates monitoring for detecting ECS containers that were stopped abruptly for reasons such as,
|
|
16
|
+
* out of memory, failed health checks.
|
|
17
|
+
*
|
|
18
|
+
* The monitor will consume the ECS events and send them to a CloudWatch log group, which are forwarded to Datadog for
|
|
19
|
+
* better analyses and trigger an alert.
|
|
20
|
+
*
|
|
21
|
+
* More details on the AWS ECS events can be found here:
|
|
22
|
+
* {@link https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwe_events.html}
|
|
23
|
+
*
|
|
24
|
+
* This monitor adds transparency to such cases, which otherwise would happen without being noticed and could escalate
|
|
25
|
+
* to bigger issues, like a service being that requires more resources.
|
|
26
|
+
*/
|
|
27
|
+
export declare class AwsEcsAbruptlyStoppedMonitor extends Construct {
|
|
28
|
+
constructor(scope: Construct, id: string, props: EcsAbruptlyStoppedMonitorProps);
|
|
29
|
+
}
|