@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 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": "FORWARDER_LAMBDA"
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": 25
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": 24
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": 17
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
- "stability": "stable"
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": 16
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": 273
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": 269
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": 365
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": 322
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": 361
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": 357
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": 362
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": 356
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": 359
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": 358
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": 363
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": "FORWARDER_LAMBDA"
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": 365
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": 322
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": 361
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": 357
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": 362
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": 356
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": 359
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": 358
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": 363
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": "bjP8L5bYiY0Su+SMlamb7SRgqcASs/Rlx46us5R6B3M="
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
- ##### `alertType`<sup>Optional</sup> <a name="alertType" id="@rio-cloud/cdk-v2-constructs.DatadogUsageMonitoringProps.property.alertType"></a>
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, see https://docs.datadoghq.com/integrations/ecs_fargate/?tab=logdriver#log-collection. |
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
- ##### `FORWARDER_LAMBDA` <a name="FORWARDER_LAMBDA" id="@rio-cloud/cdk-v2-constructs.DataDogLoggingMode.FORWARDER_LAMBDA"></a>
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, see https://docs.datadoghq.com/integrations/ecs_fargate/?tab=logdriver#log-collection. |
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
- ##### `FORWARDER_LAMBDA` <a name="FORWARDER_LAMBDA" id="@rio-cloud/cdk-v2-constructs.fargate.DataDogLoggingMode.FORWARDER_LAMBDA"></a>
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 datadog_monitor_1 = require("../../../datadog/datadog-monitor");
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, teamName, usageSpikeMonitor, props.alertType);
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, teamName, usageSpikeMonitor, alertType) {
117
- return new datadog_monitor_1.DatadogMonitor(this, usageSpikeMonitor.humanReadableName, {
115
+ createAnomalyMonitorForSpikes(serviceName, usageSpikeMonitor, notification) {
116
+ return new datadogv2_1.DatadogMonitor(this, usageSpikeMonitor.humanReadableName, {
117
+ name: `${usageSpikeMonitor.humanReadableName} spike`,
118
118
  serviceName,
119
- alertTypes: alertType ? [alertType] : undefined,
120
- monitor: {
121
- name: `${usageSpikeMonitor.humanReadableName} spike`,
122
- type: 'query alert',
123
- 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`,
124
- message: `[P4] ${usageSpikeMonitor.humanReadableName} are getting out-of-control. ${usageSpikeMonitor.additionalMessage ?? ''}`,
125
- options: {
126
- include_tags: false,
127
- notify_no_data: false,
128
- threshold_windows: {
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
+ }