@rio-cloud/cdk-v2-constructs 2.0.5 → 2.2.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 +319 -10
- package/CHANGELOG.md +32 -0
- package/lib/contributions/team-transport-two/pipeline/application-stage.d.ts +12 -0
- package/lib/contributions/team-transport-two/pipeline/application-stage.js +16 -0
- package/lib/contributions/team-transport-two/pipeline/build-project.d.ts +13 -0
- package/lib/contributions/team-transport-two/pipeline/build-project.js +31 -0
- package/lib/contributions/team-transport-two/pipeline/datadog-monitors.d.ts +15 -0
- package/lib/contributions/team-transport-two/pipeline/datadog-monitors.js +42 -0
- package/lib/contributions/team-transport-two/pipeline/index.d.ts +1 -0
- package/lib/contributions/team-transport-two/pipeline/index.js +14 -0
- package/lib/contributions/team-transport-two/pipeline/pipeline-stack.d.ts +105 -0
- package/lib/contributions/team-transport-two/pipeline/pipeline-stack.js +165 -0
- package/lib/datadog/datadogLogIndexMonitoring.js +4 -4
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/watchful/lambda.d.ts +1 -0
- package/lib/watchful/lambda.js +18 -1
- package/package.json +1 -1
- package/scripts/.jsii-doc.mjs +11 -0
- package/version.json +1 -1
package/.jsii
CHANGED
|
@@ -2990,6 +2990,56 @@
|
|
|
2990
2990
|
}
|
|
2991
2991
|
},
|
|
2992
2992
|
"types": {
|
|
2993
|
+
"@rio-cloud/cdk-v2-constructs.AppStackProps": {
|
|
2994
|
+
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
2995
|
+
"datatype": true,
|
|
2996
|
+
"docs": {
|
|
2997
|
+
"stability": "stable"
|
|
2998
|
+
},
|
|
2999
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.AppStackProps",
|
|
3000
|
+
"interfaces": [
|
|
3001
|
+
"aws-cdk-lib.StackProps"
|
|
3002
|
+
],
|
|
3003
|
+
"kind": "interface",
|
|
3004
|
+
"locationInModule": {
|
|
3005
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
3006
|
+
"line": 94
|
|
3007
|
+
},
|
|
3008
|
+
"name": "AppStackProps",
|
|
3009
|
+
"properties": [
|
|
3010
|
+
{
|
|
3011
|
+
"abstract": true,
|
|
3012
|
+
"docs": {
|
|
3013
|
+
"stability": "stable"
|
|
3014
|
+
},
|
|
3015
|
+
"immutable": true,
|
|
3016
|
+
"locationInModule": {
|
|
3017
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
3018
|
+
"line": 95
|
|
3019
|
+
},
|
|
3020
|
+
"name": "serviceName",
|
|
3021
|
+
"type": {
|
|
3022
|
+
"primitive": "string"
|
|
3023
|
+
}
|
|
3024
|
+
},
|
|
3025
|
+
{
|
|
3026
|
+
"abstract": true,
|
|
3027
|
+
"docs": {
|
|
3028
|
+
"stability": "stable"
|
|
3029
|
+
},
|
|
3030
|
+
"immutable": true,
|
|
3031
|
+
"locationInModule": {
|
|
3032
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
3033
|
+
"line": 96
|
|
3034
|
+
},
|
|
3035
|
+
"name": "version",
|
|
3036
|
+
"type": {
|
|
3037
|
+
"primitive": "string"
|
|
3038
|
+
}
|
|
3039
|
+
}
|
|
3040
|
+
],
|
|
3041
|
+
"symbolId": "src/contributions/team-transport-two/pipeline/pipeline-stack:AppStackProps"
|
|
3042
|
+
},
|
|
2993
3043
|
"@rio-cloud/cdk-v2-constructs.Claidometer": {
|
|
2994
3044
|
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
2995
3045
|
"base": "constructs.Construct",
|
|
@@ -4078,6 +4128,57 @@
|
|
|
4078
4128
|
"name": "Framework",
|
|
4079
4129
|
"symbolId": "src/fargate/rio-fargate-service:Framework"
|
|
4080
4130
|
},
|
|
4131
|
+
"@rio-cloud/cdk-v2-constructs.IAppStackFactory": {
|
|
4132
|
+
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
4133
|
+
"docs": {
|
|
4134
|
+
"example": "// Use e.g. within ApplicationProps as JSONObject:\n{ create: (construct, props) => new Stack(construct, 'AppStack', props) }\n\n// or simply as class interface within your stack implementation:\nclass PipelineStage extends Stage implements IAppStackFactory {\n constructor(scope: Construct, id: string, props: StageProps) {\n super(scope, id, props);\n // your stage definitiom\n }\n\n create(scope: Construct, props: AppStackProps): void {\n // app stack initiation goes in here\n }\n}",
|
|
4135
|
+
"remarks": "Simply place the AppStack creation into the create-method:",
|
|
4136
|
+
"stability": "stable",
|
|
4137
|
+
"summary": "Provider interface to create the AppStack within the specific scope."
|
|
4138
|
+
},
|
|
4139
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.IAppStackFactory",
|
|
4140
|
+
"kind": "interface",
|
|
4141
|
+
"locationInModule": {
|
|
4142
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
4143
|
+
"line": 84
|
|
4144
|
+
},
|
|
4145
|
+
"methods": [
|
|
4146
|
+
{
|
|
4147
|
+
"abstract": true,
|
|
4148
|
+
"docs": {
|
|
4149
|
+
"stability": "stable",
|
|
4150
|
+
"summary": "Factory method, being invoked with the specific scope during pipeline instantiation."
|
|
4151
|
+
},
|
|
4152
|
+
"locationInModule": {
|
|
4153
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
4154
|
+
"line": 91
|
|
4155
|
+
},
|
|
4156
|
+
"name": "create",
|
|
4157
|
+
"parameters": [
|
|
4158
|
+
{
|
|
4159
|
+
"docs": {
|
|
4160
|
+
"summary": "the parent construct for the app stack."
|
|
4161
|
+
},
|
|
4162
|
+
"name": "scope",
|
|
4163
|
+
"type": {
|
|
4164
|
+
"fqn": "constructs.Construct"
|
|
4165
|
+
}
|
|
4166
|
+
},
|
|
4167
|
+
{
|
|
4168
|
+
"docs": {
|
|
4169
|
+
"summary": "the app stacks properties."
|
|
4170
|
+
},
|
|
4171
|
+
"name": "props",
|
|
4172
|
+
"type": {
|
|
4173
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.AppStackProps"
|
|
4174
|
+
}
|
|
4175
|
+
}
|
|
4176
|
+
]
|
|
4177
|
+
}
|
|
4178
|
+
],
|
|
4179
|
+
"name": "IAppStackFactory",
|
|
4180
|
+
"symbolId": "src/contributions/team-transport-two/pipeline/pipeline-stack:IAppStackFactory"
|
|
4181
|
+
},
|
|
4081
4182
|
"@rio-cloud/cdk-v2-constructs.IWatchful": {
|
|
4082
4183
|
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
4083
4184
|
"docs": {
|
|
@@ -5191,6 +5292,214 @@
|
|
|
5191
5292
|
],
|
|
5192
5293
|
"symbolId": "src/watchful/metric-alarm:MetricAlarmProps"
|
|
5193
5294
|
},
|
|
5295
|
+
"@rio-cloud/cdk-v2-constructs.PipelineStack": {
|
|
5296
|
+
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
5297
|
+
"base": "aws-cdk-lib.Stack",
|
|
5298
|
+
"docs": {
|
|
5299
|
+
"stability": "stable"
|
|
5300
|
+
},
|
|
5301
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.PipelineStack",
|
|
5302
|
+
"initializer": {
|
|
5303
|
+
"docs": {
|
|
5304
|
+
"stability": "stable"
|
|
5305
|
+
},
|
|
5306
|
+
"locationInModule": {
|
|
5307
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
5308
|
+
"line": 137
|
|
5309
|
+
},
|
|
5310
|
+
"parameters": [
|
|
5311
|
+
{
|
|
5312
|
+
"name": "scope",
|
|
5313
|
+
"type": {
|
|
5314
|
+
"fqn": "constructs.Construct"
|
|
5315
|
+
}
|
|
5316
|
+
},
|
|
5317
|
+
{
|
|
5318
|
+
"name": "id",
|
|
5319
|
+
"type": {
|
|
5320
|
+
"primitive": "string"
|
|
5321
|
+
}
|
|
5322
|
+
},
|
|
5323
|
+
{
|
|
5324
|
+
"name": "props",
|
|
5325
|
+
"type": {
|
|
5326
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.PipelineStackProps"
|
|
5327
|
+
}
|
|
5328
|
+
}
|
|
5329
|
+
]
|
|
5330
|
+
},
|
|
5331
|
+
"kind": "class",
|
|
5332
|
+
"locationInModule": {
|
|
5333
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
5334
|
+
"line": 127
|
|
5335
|
+
},
|
|
5336
|
+
"name": "PipelineStack",
|
|
5337
|
+
"symbolId": "src/contributions/team-transport-two/pipeline/pipeline-stack:PipelineStack"
|
|
5338
|
+
},
|
|
5339
|
+
"@rio-cloud/cdk-v2-constructs.PipelineStackProps": {
|
|
5340
|
+
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
5341
|
+
"datatype": true,
|
|
5342
|
+
"docs": {
|
|
5343
|
+
"stability": "stable"
|
|
5344
|
+
},
|
|
5345
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.PipelineStackProps",
|
|
5346
|
+
"interfaces": [
|
|
5347
|
+
"aws-cdk-lib.StackProps"
|
|
5348
|
+
],
|
|
5349
|
+
"kind": "interface",
|
|
5350
|
+
"locationInModule": {
|
|
5351
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
5352
|
+
"line": 22
|
|
5353
|
+
},
|
|
5354
|
+
"name": "PipelineStackProps",
|
|
5355
|
+
"properties": [
|
|
5356
|
+
{
|
|
5357
|
+
"abstract": true,
|
|
5358
|
+
"docs": {
|
|
5359
|
+
"remarks": "This acts as a wrapper for all resources you want to deploy via the pipeline.",
|
|
5360
|
+
"stability": "stable",
|
|
5361
|
+
"summary": "Provider for appStack to be deployed."
|
|
5362
|
+
},
|
|
5363
|
+
"immutable": true,
|
|
5364
|
+
"locationInModule": {
|
|
5365
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
5366
|
+
"line": 39
|
|
5367
|
+
},
|
|
5368
|
+
"name": "appStackFactory",
|
|
5369
|
+
"type": {
|
|
5370
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.IAppStackFactory"
|
|
5371
|
+
}
|
|
5372
|
+
},
|
|
5373
|
+
{
|
|
5374
|
+
"abstract": true,
|
|
5375
|
+
"docs": {
|
|
5376
|
+
"stability": "stable",
|
|
5377
|
+
"summary": "Defines which kind of pipeline is deployed."
|
|
5378
|
+
},
|
|
5379
|
+
"immutable": true,
|
|
5380
|
+
"locationInModule": {
|
|
5381
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
5382
|
+
"line": 44
|
|
5383
|
+
},
|
|
5384
|
+
"name": "pipelineType",
|
|
5385
|
+
"type": {
|
|
5386
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.PipelineType"
|
|
5387
|
+
}
|
|
5388
|
+
},
|
|
5389
|
+
{
|
|
5390
|
+
"abstract": true,
|
|
5391
|
+
"docs": {
|
|
5392
|
+
"remarks": "I.e. the stack is named after the service\n- The serviceName is handed over to all Datadog monitors\n- RIO convention is that uploaded license-check-files are named after the service, i.e. serviceName.txt",
|
|
5393
|
+
"stability": "stable",
|
|
5394
|
+
"summary": "The name of the service - This has to be the same name as the repository as the s3 trigger file created by the bitbucket-integration uses this as a prefix - The serviceName is available as an environment variable SERVICE_NAME in the CodeBuildStep - The serviceName is available in the AppStackProps in the appStackFactory - The serviceName is available as stackName property in the AppStackProps in the appStackFactory."
|
|
5395
|
+
},
|
|
5396
|
+
"immutable": true,
|
|
5397
|
+
"locationInModule": {
|
|
5398
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
5399
|
+
"line": 32
|
|
5400
|
+
},
|
|
5401
|
+
"name": "serviceName",
|
|
5402
|
+
"type": {
|
|
5403
|
+
"primitive": "string"
|
|
5404
|
+
}
|
|
5405
|
+
},
|
|
5406
|
+
{
|
|
5407
|
+
"abstract": true,
|
|
5408
|
+
"docs": {
|
|
5409
|
+
"remarks": "A pre-defined buildspec.yaml fitting the pipelineType is used if not provided.",
|
|
5410
|
+
"stability": "stable",
|
|
5411
|
+
"summary": "Path to a custom buildspec.yaml that is used if provided."
|
|
5412
|
+
},
|
|
5413
|
+
"immutable": true,
|
|
5414
|
+
"locationInModule": {
|
|
5415
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
5416
|
+
"line": 51
|
|
5417
|
+
},
|
|
5418
|
+
"name": "customBuildspecPath",
|
|
5419
|
+
"optional": true,
|
|
5420
|
+
"type": {
|
|
5421
|
+
"primitive": "string"
|
|
5422
|
+
}
|
|
5423
|
+
},
|
|
5424
|
+
{
|
|
5425
|
+
"abstract": true,
|
|
5426
|
+
"docs": {
|
|
5427
|
+
"remarks": "The RioSecretsDeployStep is added prior to deployment of the AppStack if a path is provided.\n\nNo secrets are deployed if no path is provided.",
|
|
5428
|
+
"stability": "stable",
|
|
5429
|
+
"summary": "Path to secrets file containing encrypted secrets."
|
|
5430
|
+
},
|
|
5431
|
+
"immutable": true,
|
|
5432
|
+
"locationInModule": {
|
|
5433
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
5434
|
+
"line": 60
|
|
5435
|
+
},
|
|
5436
|
+
"name": "secretsDeployStepProps",
|
|
5437
|
+
"optional": true,
|
|
5438
|
+
"type": {
|
|
5439
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.PipelineStackRioSecretsDeployStepProps"
|
|
5440
|
+
}
|
|
5441
|
+
}
|
|
5442
|
+
],
|
|
5443
|
+
"symbolId": "src/contributions/team-transport-two/pipeline/pipeline-stack:PipelineStackProps"
|
|
5444
|
+
},
|
|
5445
|
+
"@rio-cloud/cdk-v2-constructs.PipelineStackRioSecretsDeployStepProps": {
|
|
5446
|
+
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
5447
|
+
"datatype": true,
|
|
5448
|
+
"docs": {
|
|
5449
|
+
"see": "rio.RioSecretsDeployStepProps",
|
|
5450
|
+
"stability": "stable",
|
|
5451
|
+
"summary": "Selected properties being handed over to RioSecretsDeployStep."
|
|
5452
|
+
},
|
|
5453
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.PipelineStackRioSecretsDeployStepProps",
|
|
5454
|
+
"kind": "interface",
|
|
5455
|
+
"locationInModule": {
|
|
5456
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
5457
|
+
"line": 105
|
|
5458
|
+
},
|
|
5459
|
+
"name": "PipelineStackRioSecretsDeployStepProps",
|
|
5460
|
+
"properties": [
|
|
5461
|
+
{
|
|
5462
|
+
"abstract": true,
|
|
5463
|
+
"docs": {
|
|
5464
|
+
"stability": "stable"
|
|
5465
|
+
},
|
|
5466
|
+
"immutable": true,
|
|
5467
|
+
"locationInModule": {
|
|
5468
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
5469
|
+
"line": 106
|
|
5470
|
+
},
|
|
5471
|
+
"name": "secretsFilePath",
|
|
5472
|
+
"type": {
|
|
5473
|
+
"primitive": "string"
|
|
5474
|
+
}
|
|
5475
|
+
}
|
|
5476
|
+
],
|
|
5477
|
+
"symbolId": "src/contributions/team-transport-two/pipeline/pipeline-stack:PipelineStackRioSecretsDeployStepProps"
|
|
5478
|
+
},
|
|
5479
|
+
"@rio-cloud/cdk-v2-constructs.PipelineType": {
|
|
5480
|
+
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
5481
|
+
"docs": {
|
|
5482
|
+
"stability": "stable"
|
|
5483
|
+
},
|
|
5484
|
+
"fqn": "@rio-cloud/cdk-v2-constructs.PipelineType",
|
|
5485
|
+
"kind": "enum",
|
|
5486
|
+
"locationInModule": {
|
|
5487
|
+
"filename": "src/contributions/team-transport-two/pipeline/pipeline-stack.ts",
|
|
5488
|
+
"line": 109
|
|
5489
|
+
},
|
|
5490
|
+
"members": [
|
|
5491
|
+
{
|
|
5492
|
+
"docs": {
|
|
5493
|
+
"remarks": "Comes with a pre-defined buildspec.yaml for a gradle project. This buildspec.yaml is used for both the main and\nbranch pipeline and includes the following steps\n- build and test of the artifact via command \"./gradlew clean build\".\n<p> This gradle command must be provided by the gradle project.\n- license-check and upload of license-check-file via command \"./gradlew checkLicenses\".\n<p> This gradle command must be provided by the gradle project.\n- create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer.\n- build the container image via command \"./gradlew jibBuildTar\".\n<p> This gradle command must be provided by the gradle project.",
|
|
5494
|
+
"stability": "stable",
|
|
5495
|
+
"summary": "Self-mutating codepipeline deploying the provided AppStack. Be aware: The provided service won't have access to Kafka."
|
|
5496
|
+
},
|
|
5497
|
+
"name": "STANDARD_GRADLE"
|
|
5498
|
+
}
|
|
5499
|
+
],
|
|
5500
|
+
"name": "PipelineType",
|
|
5501
|
+
"symbolId": "src/contributions/team-transport-two/pipeline/pipeline-stack:PipelineType"
|
|
5502
|
+
},
|
|
5194
5503
|
"@rio-cloud/cdk-v2-constructs.RioBitBucketSourceAction": {
|
|
5195
5504
|
"assembly": "@rio-cloud/cdk-v2-constructs",
|
|
5196
5505
|
"base": "aws-cdk-lib.aws_codepipeline_actions.S3SourceAction",
|
|
@@ -7187,7 +7496,7 @@
|
|
|
7187
7496
|
},
|
|
7188
7497
|
"locationInModule": {
|
|
7189
7498
|
"filename": "src/watchful/lambda.ts",
|
|
7190
|
-
"line":
|
|
7499
|
+
"line": 68
|
|
7191
7500
|
},
|
|
7192
7501
|
"parameters": [
|
|
7193
7502
|
{
|
|
@@ -7213,7 +7522,7 @@
|
|
|
7213
7522
|
"kind": "class",
|
|
7214
7523
|
"locationInModule": {
|
|
7215
7524
|
"filename": "src/watchful/lambda.ts",
|
|
7216
|
-
"line":
|
|
7525
|
+
"line": 64
|
|
7217
7526
|
},
|
|
7218
7527
|
"name": "WatchLambdaFunction",
|
|
7219
7528
|
"symbolId": "src/watchful/lambda:WatchLambdaFunction"
|
|
@@ -7229,7 +7538,7 @@
|
|
|
7229
7538
|
"kind": "interface",
|
|
7230
7539
|
"locationInModule": {
|
|
7231
7540
|
"filename": "src/watchful/lambda.ts",
|
|
7232
|
-
"line":
|
|
7541
|
+
"line": 14
|
|
7233
7542
|
},
|
|
7234
7543
|
"name": "WatchLambdaFunctionOptions",
|
|
7235
7544
|
"properties": [
|
|
@@ -7244,7 +7553,7 @@
|
|
|
7244
7553
|
"immutable": true,
|
|
7245
7554
|
"locationInModule": {
|
|
7246
7555
|
"filename": "src/watchful/lambda.ts",
|
|
7247
|
-
"line":
|
|
7556
|
+
"line": 38
|
|
7248
7557
|
},
|
|
7249
7558
|
"name": "durationThresholdPercent",
|
|
7250
7559
|
"optional": true,
|
|
@@ -7263,7 +7572,7 @@
|
|
|
7263
7572
|
"immutable": true,
|
|
7264
7573
|
"locationInModule": {
|
|
7265
7574
|
"filename": "src/watchful/lambda.ts",
|
|
7266
|
-
"line":
|
|
7575
|
+
"line": 20
|
|
7267
7576
|
},
|
|
7268
7577
|
"name": "errorsPerMinuteThreshold",
|
|
7269
7578
|
"optional": true,
|
|
@@ -7281,7 +7590,7 @@
|
|
|
7281
7590
|
"immutable": true,
|
|
7282
7591
|
"locationInModule": {
|
|
7283
7592
|
"filename": "src/watchful/lambda.ts",
|
|
7284
|
-
"line":
|
|
7593
|
+
"line": 27
|
|
7285
7594
|
},
|
|
7286
7595
|
"name": "throttlesPerMinuteThreshold",
|
|
7287
7596
|
"optional": true,
|
|
@@ -7306,7 +7615,7 @@
|
|
|
7306
7615
|
"kind": "interface",
|
|
7307
7616
|
"locationInModule": {
|
|
7308
7617
|
"filename": "src/watchful/lambda.ts",
|
|
7309
|
-
"line":
|
|
7618
|
+
"line": 44
|
|
7310
7619
|
},
|
|
7311
7620
|
"name": "WatchLambdaFunctionProps",
|
|
7312
7621
|
"properties": [
|
|
@@ -7320,7 +7629,7 @@
|
|
|
7320
7629
|
"immutable": true,
|
|
7321
7630
|
"locationInModule": {
|
|
7322
7631
|
"filename": "src/watchful/lambda.ts",
|
|
7323
|
-
"line":
|
|
7632
|
+
"line": 54
|
|
7324
7633
|
},
|
|
7325
7634
|
"name": "fn",
|
|
7326
7635
|
"type": {
|
|
@@ -7337,7 +7646,7 @@
|
|
|
7337
7646
|
"immutable": true,
|
|
7338
7647
|
"locationInModule": {
|
|
7339
7648
|
"filename": "src/watchful/lambda.ts",
|
|
7340
|
-
"line":
|
|
7649
|
+
"line": 48
|
|
7341
7650
|
},
|
|
7342
7651
|
"name": "watchful",
|
|
7343
7652
|
"type": {
|
|
@@ -7870,5 +8179,5 @@
|
|
|
7870
8179
|
}
|
|
7871
8180
|
},
|
|
7872
8181
|
"version": "0.0.0",
|
|
7873
|
-
"fingerprint": "
|
|
8182
|
+
"fingerprint": "wQh8wZb2kBC0KyheUi2gQaDene6z7Ds5OQAEc3gNxPA="
|
|
7874
8183
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,38 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [2.2.0](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.1.0&sourceBranch=refs%2Ftags%2Fv2.2.0) (2022-06-14)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* New construct - Opinionated RIO pipeline ([7f6fd07](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/7f6fd0778d498f4d62a9b5def6ac476b95f3ab4e))
|
|
11
|
+
* New construct - Opinionated RIO pipeline ([a290a92](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/a290a92ace145966537e51546449fd64cddd99ad))
|
|
12
|
+
* New construct - Opinionated RIO pipeline ([0e16395](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/0e16395374a83d6a5ff05abc7c68f9141a73c991))
|
|
13
|
+
* New construct - Opinionated RIO pipeline ([ca831c2](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/ca831c2321c0a68ad24ecf80d76dc1d857a72868))
|
|
14
|
+
* New construct - Opinionated RIO pipeline ([e1e5bbf](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/e1e5bbf7444745702fd3cee65ecbf2820e1f4d26))
|
|
15
|
+
* New construct - Opinionated RIO pipeline ([c79b5ba](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/c79b5bad900db68fb06aed8606852618c58cae6f))
|
|
16
|
+
* New construct - Opinionated RIO pipeline ([9a3e471](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/9a3e471508966faa9c0fa391518de6a817545698))
|
|
17
|
+
* New construct - Opinionated RIO pipeline ([5bebea5](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/5bebea5ebec06fbc8c8b637310f9d98a0e98cc48))
|
|
18
|
+
* New construct - Opinionated RIO pipeline ([3f6ac5d](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/3f6ac5d673c083643f5831d52b6a9ff7eacc9698))
|
|
19
|
+
* New construct - Opinionated RIO pipeline ([744d9b9](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/744d9b93bd3816d1f8c588f05456cdbadbdb035f))
|
|
20
|
+
* New construct - Opinionated RIO pipeline ([8872869](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/88728697b502be5e383a91627af4bdc0eff34366))
|
|
21
|
+
* New construct - Opinionated RIO pipeline ([89ac4d8](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/89ac4d84315326b326b0b56e2317ec6f6af03490))
|
|
22
|
+
|
|
23
|
+
## [2.1.0](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.0.6&sourceBranch=refs%2Ftags%2Fv2.1.0) (2022-06-02)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Features
|
|
27
|
+
|
|
28
|
+
* :sparkles: Added log monitor error for lambda in watchful ([2e01032](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/2e010327cd11b92f455aace32d10ce47f0afb503))
|
|
29
|
+
|
|
30
|
+
### [2.0.6](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.0.5&sourceBranch=refs%2Ftags%2Fv2.0.6) (2022-05-31)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Bug Fixes
|
|
34
|
+
|
|
35
|
+
* Migrate Datadog log monitoring to Datadog's "New Events Feature" ([97a3621](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/commits/97a36210a466d9b13fdf07c4cc859c168159e302))
|
|
36
|
+
|
|
5
37
|
### [2.0.5](https://collaboration.msi.audi.com/stash/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv2.0.4&sourceBranch=refs%2Ftags%2Fv2.0.5) (2022-05-30)
|
|
6
38
|
|
|
7
39
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Stage, StageProps } from 'aws-cdk-lib';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
import { IAppStackFactory } from './pipeline-stack';
|
|
4
|
+
interface ApplicationProps extends StageProps {
|
|
5
|
+
readonly serviceName: string;
|
|
6
|
+
readonly version: string;
|
|
7
|
+
readonly appStackFactory: IAppStackFactory;
|
|
8
|
+
}
|
|
9
|
+
export declare class Application extends Stage {
|
|
10
|
+
constructor(scope: Construct, id: string, props: ApplicationProps);
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Application = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
class Application extends aws_cdk_lib_1.Stage {
|
|
6
|
+
constructor(scope, id, props) {
|
|
7
|
+
super(scope, id, props);
|
|
8
|
+
props.appStackFactory.create(this, {
|
|
9
|
+
serviceName: props.serviceName,
|
|
10
|
+
stackName: props.serviceName,
|
|
11
|
+
version: props.version,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.Application = Application;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tc3RhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvYXBwbGljYXRpb24tc3RhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWdEO0FBVWhELE1BQWEsV0FBWSxTQUFRLG1CQUFLO0lBQ3BDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ2pDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELGtDQVVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhZ2UsIFN0YWdlUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElBcHBTdGFja0ZhY3RvcnkgfSBmcm9tICcuL3BpcGVsaW5lLXN0YWNrJztcblxuaW50ZXJmYWNlIEFwcGxpY2F0aW9uUHJvcHMgZXh0ZW5kcyBTdGFnZVByb3BzIHtcbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBhcHBTdGFja0ZhY3Rvcnk6IElBcHBTdGFja0ZhY3Rvcnk7XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbiBleHRlbmRzIFN0YWdlIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFwcGxpY2F0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHByb3BzLmFwcFN0YWNrRmFjdG9yeS5jcmVhdGUodGhpcywge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgc3RhY2tOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb246IHByb3BzLnZlcnNpb24sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as pipelines from 'aws-cdk-lib/pipelines';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
export interface RioGradleCodeBuildProjectProps {
|
|
4
|
+
input: pipelines.IFileSetProducer;
|
|
5
|
+
cdkOutDirectory?: string;
|
|
6
|
+
buildSpecPath: string;
|
|
7
|
+
serviceName: string;
|
|
8
|
+
hostedZoneName: string;
|
|
9
|
+
env?: Record<string, string>;
|
|
10
|
+
}
|
|
11
|
+
export declare class RioGradleCodeBuildProject extends pipelines.CodeBuildStep {
|
|
12
|
+
constructor(scope: Construct, id: string, props: RioGradleCodeBuildProjectProps);
|
|
13
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RioGradleCodeBuildProject = void 0;
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
|
+
const codebuild = require("aws-cdk-lib/aws-codebuild");
|
|
7
|
+
const pipelines = require("aws-cdk-lib/pipelines");
|
|
8
|
+
const yaml = require("js-yaml");
|
|
9
|
+
class RioGradleCodeBuildProject extends pipelines.CodeBuildStep {
|
|
10
|
+
constructor(scope, id, props) {
|
|
11
|
+
var _a;
|
|
12
|
+
super(id, {
|
|
13
|
+
input: props.input,
|
|
14
|
+
partialBuildSpec: codebuild.BuildSpec.fromObject(yaml.load(fs.readFileSync(props.buildSpecPath, { encoding: 'utf-8' }))),
|
|
15
|
+
commands: [],
|
|
16
|
+
buildEnvironment: {
|
|
17
|
+
buildImage: codebuild.LinuxBuildImage.AMAZON_LINUX_2_3,
|
|
18
|
+
computeType: codebuild.ComputeType.LARGE,
|
|
19
|
+
environmentVariables: {
|
|
20
|
+
AWS_ACCOUNT_ID: { value: aws_cdk_lib_1.Stack.of(scope).account },
|
|
21
|
+
SERVICE_NAME: { value: props.serviceName },
|
|
22
|
+
HOSTED_ZONE: { value: props.hostedZoneName },
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
primaryOutputDirectory: (_a = props.cdkOutDirectory) !== null && _a !== void 0 ? _a : './',
|
|
26
|
+
env: props.env,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.RioGradleCodeBuildProject = RioGradleCodeBuildProject;
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtcHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9waXBlbGluZS9idWlsZC1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlCQUF5QjtBQUN6Qiw2Q0FBb0M7QUFDcEMsdURBQXVEO0FBQ3ZELG1EQUFtRDtBQUVuRCxnQ0FBZ0M7QUFXaEMsTUFBYSx5QkFBMEIsU0FBUSxTQUFTLENBQUMsYUFBYTtJQUNwRSxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXFDOztRQUM3RSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ1IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2xCLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQVcsQ0FBQztZQUNsSSxRQUFRLEVBQUUsRUFBRTtZQUNaLGdCQUFnQixFQUFFO2dCQUNoQixVQUFVLEVBQUUsU0FBUyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0I7Z0JBQ3RELFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUs7Z0JBQ3hDLG9CQUFvQixFQUFFO29CQUNwQixjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFO29CQUNsRCxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRTtvQkFDMUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUU7aUJBQzdDO2FBQ0Y7WUFDRCxzQkFBc0IsUUFBRSxLQUFLLENBQUMsZUFBZSxtQ0FBSSxJQUFJO1lBQ3JELEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztTQUNmLENBQ0EsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXBCRCw4REFvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvZGVidWlsZCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCAqIGFzIHBpcGVsaW5lcyBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJpb0dyYWRsZUNvZGVCdWlsZFByb2plY3RQcm9wcyB7XG4gIGlucHV0OiBwaXBlbGluZXMuSUZpbGVTZXRQcm9kdWNlcjtcbiAgY2RrT3V0RGlyZWN0b3J5Pzogc3RyaW5nO1xuICBidWlsZFNwZWNQYXRoOiBzdHJpbmc7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIGhvc3RlZFpvbmVOYW1lOiBzdHJpbmc7XG4gIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBjbGFzcyBSaW9HcmFkbGVDb2RlQnVpbGRQcm9qZWN0IGV4dGVuZHMgcGlwZWxpbmVzLkNvZGVCdWlsZFN0ZXAge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmlvR3JhZGxlQ29kZUJ1aWxkUHJvamVjdFByb3BzKSB7XG4gICAgc3VwZXIoaWQsIHtcbiAgICAgIGlucHV0OiBwcm9wcy5pbnB1dCxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IGNvZGVidWlsZC5CdWlsZFNwZWMuZnJvbU9iamVjdCh5YW1sLmxvYWQoZnMucmVhZEZpbGVTeW5jKHByb3BzLmJ1aWxkU3BlY1BhdGgsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpIGFzIE9iamVjdCksXG4gICAgICBjb21tYW5kczogW10sXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IGNvZGVidWlsZC5MaW51eEJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzJfMyxcbiAgICAgICAgY29tcHV0ZVR5cGU6IGNvZGVidWlsZC5Db21wdXRlVHlwZS5MQVJHRSxcbiAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgICBBV1NfQUNDT1VOVF9JRDogeyB2YWx1ZTogU3RhY2sub2Yoc2NvcGUpLmFjY291bnQgfSxcbiAgICAgICAgICBTRVJWSUNFX05BTUU6IHsgdmFsdWU6IHByb3BzLnNlcnZpY2VOYW1lIH0sXG4gICAgICAgICAgSE9TVEVEX1pPTkU6IHsgdmFsdWU6IHByb3BzLmhvc3RlZFpvbmVOYW1lIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogcHJvcHMuY2RrT3V0RGlyZWN0b3J5ID8/ICcuLycsXG4gICAgICBlbnY6IHByb3BzLmVudixcbiAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Reference } from 'aws-cdk-lib';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
import { DatadogMonitor } from '../../../datadog/datadogMonitor';
|
|
4
|
+
interface DatadogPipelineMonitorProps {
|
|
5
|
+
pipelineName: string | Reference;
|
|
6
|
+
serviceName: string;
|
|
7
|
+
accountId: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class DatadogPipelineErrorAlert extends DatadogMonitor {
|
|
10
|
+
constructor(scope: Construct, id: string, props: DatadogPipelineMonitorProps);
|
|
11
|
+
}
|
|
12
|
+
export declare class DataDogPipelineErrorAlertForVulnerabilityChecks extends DatadogMonitor {
|
|
13
|
+
constructor(scope: Construct, id: string, props: DatadogPipelineMonitorProps);
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataDogPipelineErrorAlertForVulnerabilityChecks = exports.DatadogPipelineErrorAlert = void 0;
|
|
4
|
+
const datadogMonitor_1 = require("../../../datadog/datadogMonitor");
|
|
5
|
+
class DatadogPipelineErrorAlert extends datadogMonitor_1.DatadogMonitor {
|
|
6
|
+
constructor(scope, id, props) {
|
|
7
|
+
super(scope, id, {
|
|
8
|
+
serviceName: props.serviceName,
|
|
9
|
+
monitor: {
|
|
10
|
+
type: 'query alert',
|
|
11
|
+
tags: ['cicd'],
|
|
12
|
+
query: `min(last_5m):min:deployment.codepipeline.executions{pipeline_name:${props.pipelineName},account_id:${props.accountId}} < 1`,
|
|
13
|
+
name: 'CI pipeline status',
|
|
14
|
+
message: '[P5] {{#is_alert}}\\nThe CI build is broken\\n{{/is_alert}} \\n\\n{{#is_alert_recovery}}\\nThe CI build works again.\\n{{/is_alert_recovery}}',
|
|
15
|
+
options: {
|
|
16
|
+
require_full_window: false,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.DatadogPipelineErrorAlert = DatadogPipelineErrorAlert;
|
|
23
|
+
class DataDogPipelineErrorAlertForVulnerabilityChecks extends datadogMonitor_1.DatadogMonitor {
|
|
24
|
+
constructor(scope, id, props) {
|
|
25
|
+
super(scope, id, {
|
|
26
|
+
serviceName: props.serviceName,
|
|
27
|
+
alertTypes: ['opsgenie'],
|
|
28
|
+
monitor: {
|
|
29
|
+
type: 'query alert',
|
|
30
|
+
tags: ['cicd'],
|
|
31
|
+
query: `min(last_5m):min:deployment.codepipeline.executions{pipeline_name:${props.pipelineName},account_id:${props.accountId}} < 1`,
|
|
32
|
+
name: 'Vulnerability checks',
|
|
33
|
+
message: '[P3] Vulnerabilities detected',
|
|
34
|
+
options: {
|
|
35
|
+
require_full_window: false,
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.DataDogPipelineErrorAlertForVulnerabilityChecks = DataDogPipelineErrorAlertForVulnerabilityChecks;
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy1tb25pdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9waXBlbGluZS9kYXRhZG9nLW1vbml0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLG9FQUFpRTtBQVFqRSxNQUFhLHlCQUEwQixTQUFRLCtCQUFjO0lBQzNELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0M7UUFDMUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxhQUFhO2dCQUNuQixJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUM7Z0JBQ2QsS0FBSyxFQUFFLHFFQUFxRSxLQUFLLENBQUMsWUFBWSxlQUFlLEtBQUssQ0FBQyxTQUFTLE9BQU87Z0JBQ25JLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLE9BQU8sRUFBRSwrSUFBK0k7Z0JBQ3hKLE9BQU8sRUFBRTtvQkFDUCxtQkFBbUIsRUFBRSxLQUFLO2lCQUMzQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBaEJELDhEQWdCQztBQUVELE1BQWEsK0NBQWdELFNBQVEsK0JBQWM7SUFDakYsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFrQztRQUMxRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDeEIsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxhQUFhO2dCQUNuQixJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUM7Z0JBQ2QsS0FBSyxFQUFFLHFFQUFxRSxLQUFLLENBQUMsWUFBWSxlQUFlLEtBQUssQ0FBQyxTQUFTLE9BQU87Z0JBQ25JLElBQUksRUFBRSxzQkFBc0I7Z0JBQzVCLE9BQU8sRUFBRSwrQkFBK0I7Z0JBQ3hDLE9BQU8sRUFBRTtvQkFDUCxtQkFBbUIsRUFBRSxLQUFLO2lCQUMzQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBakJELDBHQWlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlZmVyZW5jZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRGF0YWRvZ01vbml0b3IgfSBmcm9tICcuLi8uLi8uLi9kYXRhZG9nL2RhdGFkb2dNb25pdG9yJztcblxuaW50ZXJmYWNlIERhdGFkb2dQaXBlbGluZU1vbml0b3JQcm9wcyB7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgUmVmZXJlbmNlO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICBhY2NvdW50SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFkb2dQaXBlbGluZUVycm9yQWxlcnQgZXh0ZW5kcyBEYXRhZG9nTW9uaXRvciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nUGlwZWxpbmVNb25pdG9yUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIG1vbml0b3I6IHtcbiAgICAgICAgdHlwZTogJ3F1ZXJ5IGFsZXJ0JyxcbiAgICAgICAgdGFnczogWydjaWNkJ10sXG4gICAgICAgIHF1ZXJ5OiBgbWluKGxhc3RfNW0pOm1pbjpkZXBsb3ltZW50LmNvZGVwaXBlbGluZS5leGVjdXRpb25ze3BpcGVsaW5lX25hbWU6JHtwcm9wcy5waXBlbGluZU5hbWV9LGFjY291bnRfaWQ6JHtwcm9wcy5hY2NvdW50SWR9fSA8IDFgLFxuICAgICAgICBuYW1lOiAnQ0kgcGlwZWxpbmUgc3RhdHVzJyxcbiAgICAgICAgbWVzc2FnZTogJ1tQNV0ge3sjaXNfYWxlcnR9fVxcXFxuVGhlIENJIGJ1aWxkIGlzIGJyb2tlblxcXFxue3svaXNfYWxlcnR9fSBcXFxcblxcXFxue3sjaXNfYWxlcnRfcmVjb3Zlcnl9fVxcXFxuVGhlIENJIGJ1aWxkIHdvcmtzIGFnYWluLlxcXFxue3svaXNfYWxlcnRfcmVjb3Zlcnl9fScsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICByZXF1aXJlX2Z1bGxfd2luZG93OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFEb2dQaXBlbGluZUVycm9yQWxlcnRGb3JWdWxuZXJhYmlsaXR5Q2hlY2tzIGV4dGVuZHMgRGF0YWRvZ01vbml0b3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ1BpcGVsaW5lTW9uaXRvclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBhbGVydFR5cGVzOiBbJ29wc2dlbmllJ10sXG4gICAgICBtb25pdG9yOiB7XG4gICAgICAgIHR5cGU6ICdxdWVyeSBhbGVydCcsXG4gICAgICAgIHRhZ3M6IFsnY2ljZCddLFxuICAgICAgICBxdWVyeTogYG1pbihsYXN0XzVtKTptaW46ZGVwbG95bWVudC5jb2RlcGlwZWxpbmUuZXhlY3V0aW9uc3twaXBlbGluZV9uYW1lOiR7cHJvcHMucGlwZWxpbmVOYW1lfSxhY2NvdW50X2lkOiR7cHJvcHMuYWNjb3VudElkfX0gPCAxYCxcbiAgICAgICAgbmFtZTogJ1Z1bG5lcmFiaWxpdHkgY2hlY2tzJyxcbiAgICAgICAgbWVzc2FnZTogJ1tQM10gVnVsbmVyYWJpbGl0aWVzIGRldGVjdGVkJyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHJlcXVpcmVfZnVsbF93aW5kb3c6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './pipeline-stack';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./pipeline-stack"), exports);
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9waXBlbGluZS1zdGFjayc7XG4iXX0=
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { Stack, StackProps } from 'aws-cdk-lib';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
/**
|
|
4
|
+
* @struct
|
|
5
|
+
*/
|
|
6
|
+
export interface PipelineStackProps extends StackProps {
|
|
7
|
+
/**
|
|
8
|
+
* The name of the service
|
|
9
|
+
* - This has to be the same name as the repository as the s3 trigger file created by the bitbucket-integration uses this as a prefix
|
|
10
|
+
* - The serviceName is available as an environment variable SERVICE_NAME in the CodeBuildStep
|
|
11
|
+
* - The serviceName is available in the AppStackProps in the appStackFactory
|
|
12
|
+
* - The serviceName is available as stackName property in the AppStackProps in the appStackFactory. I.e. the stack is named after the service
|
|
13
|
+
* - The serviceName is handed over to all Datadog monitors
|
|
14
|
+
* - RIO convention is that uploaded license-check-files are named after the service, i.e. serviceName.txt
|
|
15
|
+
*/
|
|
16
|
+
readonly serviceName: string;
|
|
17
|
+
/**
|
|
18
|
+
* Provider for appStack to be deployed.
|
|
19
|
+
*
|
|
20
|
+
* This acts as a wrapper for all resources you want to deploy via the pipeline.
|
|
21
|
+
*/
|
|
22
|
+
readonly appStackFactory: IAppStackFactory;
|
|
23
|
+
/**
|
|
24
|
+
* Defines which kind of pipeline is deployed.
|
|
25
|
+
*/
|
|
26
|
+
readonly pipelineType: PipelineType;
|
|
27
|
+
/**
|
|
28
|
+
* Path to a custom buildspec.yaml that is used if provided.
|
|
29
|
+
*
|
|
30
|
+
* A pre-defined buildspec.yaml fitting the pipelineType is used if not provided.
|
|
31
|
+
*/
|
|
32
|
+
readonly customBuildspecPath?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Path to secrets file containing encrypted secrets.
|
|
35
|
+
*
|
|
36
|
+
* The RioSecretsDeployStep is added prior to deployment of the AppStack if a path is provided.
|
|
37
|
+
*
|
|
38
|
+
* No secrets are deployed if no path is provided.
|
|
39
|
+
*/
|
|
40
|
+
readonly secretsDeployStepProps?: PipelineStackRioSecretsDeployStepProps;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Provider interface to create the AppStack within the specific scope
|
|
44
|
+
*
|
|
45
|
+
* Simply place the AppStack creation into the create-method:
|
|
46
|
+
* @example
|
|
47
|
+
*
|
|
48
|
+
* // Use e.g. within ApplicationProps as JSONObject:
|
|
49
|
+
* { create: (construct, props) => new Stack(construct, 'AppStack', props) }
|
|
50
|
+
*
|
|
51
|
+
* // or simply as class interface within your stack implementation:
|
|
52
|
+
* class PipelineStage extends Stage implements IAppStackFactory {
|
|
53
|
+
* constructor(scope: Construct, id: string, props: StageProps) {
|
|
54
|
+
* super(scope, id, props);
|
|
55
|
+
* // your stage definitiom
|
|
56
|
+
* }
|
|
57
|
+
*
|
|
58
|
+
* create(scope: Construct, props: AppStackProps): void {
|
|
59
|
+
* // app stack initiation goes in here
|
|
60
|
+
* }
|
|
61
|
+
* }
|
|
62
|
+
*/
|
|
63
|
+
export interface IAppStackFactory {
|
|
64
|
+
/**
|
|
65
|
+
* Factory method, being invoked with the specific scope during pipeline instantiation
|
|
66
|
+
*
|
|
67
|
+
* @param scope the parent construct for the app stack
|
|
68
|
+
* @param props the app stacks properties
|
|
69
|
+
*/
|
|
70
|
+
create(scope: Construct, props: AppStackProps): void;
|
|
71
|
+
}
|
|
72
|
+
export interface AppStackProps extends StackProps {
|
|
73
|
+
readonly serviceName: string;
|
|
74
|
+
readonly version: string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Selected properties being handed over to RioSecretsDeployStep.
|
|
78
|
+
*
|
|
79
|
+
* @see rio.RioSecretsDeployStep
|
|
80
|
+
* @see rio.RioSecretsDeployStepProps
|
|
81
|
+
*/
|
|
82
|
+
export interface PipelineStackRioSecretsDeployStepProps {
|
|
83
|
+
readonly secretsFilePath: string;
|
|
84
|
+
}
|
|
85
|
+
export declare enum PipelineType {
|
|
86
|
+
/**
|
|
87
|
+
* Self-mutating codepipeline deploying the provided AppStack. Be aware: The provided service won't have access to Kafka.
|
|
88
|
+
*
|
|
89
|
+
* Comes with a pre-defined buildspec.yaml for a gradle project. This buildspec.yaml is used for both the main and
|
|
90
|
+
* branch pipeline and includes the following steps
|
|
91
|
+
* - build and test of the artifact via command "./gradlew clean build".
|
|
92
|
+
* <p> This gradle command must be provided by the gradle project.
|
|
93
|
+
* - license-check and upload of license-check-file via command "./gradlew checkLicenses".
|
|
94
|
+
* <p> This gradle command must be provided by the gradle project.
|
|
95
|
+
* - create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer.
|
|
96
|
+
* - build the container image via command "./gradlew jibBuildTar".
|
|
97
|
+
* <p> This gradle command must be provided by the gradle project.
|
|
98
|
+
*/
|
|
99
|
+
STANDARD_GRADLE = "STANDARD_GRADLE"
|
|
100
|
+
}
|
|
101
|
+
export declare class PipelineStack extends Stack {
|
|
102
|
+
private static addLifecycleRuleArtifactBucket;
|
|
103
|
+
constructor(scope: Construct, id: string, props: PipelineStackProps);
|
|
104
|
+
private renamePipelineToLowerCase;
|
|
105
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.PipelineStack = exports.PipelineType = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const cdk = require("aws-cdk-lib");
|
|
8
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
9
|
+
const codepipeline = require("aws-cdk-lib/aws-codepipeline");
|
|
10
|
+
const codepipeline_actions = require("aws-cdk-lib/aws-codepipeline-actions");
|
|
11
|
+
const events = require("aws-cdk-lib/aws-events");
|
|
12
|
+
const targets = require("aws-cdk-lib/aws-events-targets");
|
|
13
|
+
const s3 = require("aws-cdk-lib/aws-s3");
|
|
14
|
+
const ssm = require("aws-cdk-lib/aws-ssm");
|
|
15
|
+
const pipelines = require("aws-cdk-lib/pipelines");
|
|
16
|
+
const pipelines_1 = require("aws-cdk-lib/pipelines");
|
|
17
|
+
const rio = require("../../../index");
|
|
18
|
+
const upperToLower_1 = require("../../../watchful/upperToLower");
|
|
19
|
+
const application_stage_1 = require("./application-stage");
|
|
20
|
+
const build_project_1 = require("./build-project");
|
|
21
|
+
const datadog_monitors_1 = require("./datadog-monitors");
|
|
22
|
+
var PipelineType;
|
|
23
|
+
(function (PipelineType) {
|
|
24
|
+
/**
|
|
25
|
+
* Self-mutating codepipeline deploying the provided AppStack. Be aware: The provided service won't have access to Kafka.
|
|
26
|
+
*
|
|
27
|
+
* Comes with a pre-defined buildspec.yaml for a gradle project. This buildspec.yaml is used for both the main and
|
|
28
|
+
* branch pipeline and includes the following steps
|
|
29
|
+
* - build and test of the artifact via command "./gradlew clean build".
|
|
30
|
+
* <p> This gradle command must be provided by the gradle project.
|
|
31
|
+
* - license-check and upload of license-check-file via command "./gradlew checkLicenses".
|
|
32
|
+
* <p> This gradle command must be provided by the gradle project.
|
|
33
|
+
* - create a self-signed certificate to make TLS communication possible, e.g. with a loadbalancer.
|
|
34
|
+
* - build the container image via command "./gradlew jibBuildTar".
|
|
35
|
+
* <p> This gradle command must be provided by the gradle project.
|
|
36
|
+
*/
|
|
37
|
+
PipelineType["STANDARD_GRADLE"] = "STANDARD_GRADLE";
|
|
38
|
+
})(PipelineType = exports.PipelineType || (exports.PipelineType = {}));
|
|
39
|
+
class PipelineStack extends aws_cdk_lib_1.Stack {
|
|
40
|
+
constructor(scope, id, props) {
|
|
41
|
+
super(scope, id, props);
|
|
42
|
+
// Creating the main pipeline
|
|
43
|
+
const bucket = s3.Bucket.fromBucketName(this, 'TriggerBucket', aws_cdk_lib_1.Fn.importValue('bitbucket-integration-s3-bucket'));
|
|
44
|
+
const hostedZone = rio.RioLandingZone.getDefaultHostedZone(this);
|
|
45
|
+
const inputMasterTriggerFile = pipelines.CodePipelineSource.s3(bucket, `${props.serviceName}/trigger/${rio.TriggerKey.MASTER_REPO}`, { trigger: codepipeline_actions.S3Trigger.EVENTS });
|
|
46
|
+
const inputBranchTriggerFile = pipelines.CodePipelineSource.s3(bucket, `${props.serviceName}/trigger/${rio.TriggerKey.BRANCH_REPO}`, { trigger: codepipeline_actions.S3Trigger.EVENTS });
|
|
47
|
+
const ossLicensesBucketParameter = ssm.StringParameter.fromStringParameterAttributes(this, 'OssLicensesBucketParameter', {
|
|
48
|
+
parameterName: '/config/oss-licenses/bucket-name',
|
|
49
|
+
});
|
|
50
|
+
const ossLicensesBucket = s3.Bucket.fromBucketName(this, 'OssLicensesBucket', ossLicensesBucketParameter.stringValue);
|
|
51
|
+
const serviceKeystorePassword = ssm.StringParameter.fromSecureStringParameterAttributes(this, 'KeystorePassword', {
|
|
52
|
+
parameterName: `/config/${props.serviceName}/service-keystore-password`,
|
|
53
|
+
version: 1,
|
|
54
|
+
});
|
|
55
|
+
const accountNameParameter = ssm.StringParameter.fromStringParameterName(this, 'AccountNameParameter', '/config/account/name');
|
|
56
|
+
const gradlebuild = new build_project_1.RioGradleCodeBuildProject(this, 'GradleBuild', {
|
|
57
|
+
input: inputMasterTriggerFile,
|
|
58
|
+
cdkOutDirectory: 'infrastructure/cdk.out',
|
|
59
|
+
buildSpecPath: props.customBuildspecPath || path.resolve(__dirname, 'buildspec.yaml'),
|
|
60
|
+
hostedZoneName: hostedZone.zoneName,
|
|
61
|
+
serviceName: props.serviceName,
|
|
62
|
+
});
|
|
63
|
+
const pipeline = new pipelines.CodePipeline(this, 'Pipeline', {
|
|
64
|
+
synth: gradlebuild,
|
|
65
|
+
});
|
|
66
|
+
// CloudAssemblyArtifacts must be smaller than 256MB. Due to the gradle artifact we are exceeding this limit and pipeline fails in deployment step.
|
|
67
|
+
// Issue is known and not fixed for already some years. See: https://github.com/aws/aws-cdk/issues/9917
|
|
68
|
+
// Dirty fix: Assets are already uploaded and thus not needed. Remove them from pipeline artifact.
|
|
69
|
+
const stripAssetsStep = new pipelines_1.CodeBuildStep('StripAssetsFromAssembly', {
|
|
70
|
+
input: pipeline.cloudAssemblyFileSet,
|
|
71
|
+
commands: [
|
|
72
|
+
'S3_PATH=${CODEBUILD_SOURCE_VERSION#"arn:aws:s3:::"}',
|
|
73
|
+
'ZIP_ARCHIVE=$(basename $S3_PATH)',
|
|
74
|
+
'rm -rfv asset.*',
|
|
75
|
+
'zip -r -q -A $ZIP_ARCHIVE *',
|
|
76
|
+
'aws s3 cp $ZIP_ARCHIVE s3://$S3_PATH',
|
|
77
|
+
],
|
|
78
|
+
});
|
|
79
|
+
pipeline.addWave('BeforeDeploy', { pre: [stripAssetsStep] });
|
|
80
|
+
pipeline.addStage(new application_stage_1.Application(this, 'DeployApplicationStacks', {
|
|
81
|
+
appStackFactory: props.appStackFactory,
|
|
82
|
+
serviceName: props.serviceName,
|
|
83
|
+
version: codepipeline.GlobalVariables.executionId,
|
|
84
|
+
}), {
|
|
85
|
+
pre: props.secretsDeployStepProps ? [
|
|
86
|
+
new rio.RioSecretsDeployStep(this, 'DeploySecrets', { ...props.secretsDeployStepProps, input: inputMasterTriggerFile }),
|
|
87
|
+
] : undefined,
|
|
88
|
+
});
|
|
89
|
+
pipeline.buildPipeline();
|
|
90
|
+
const rule = new events.Rule(this, 'PipelineSchedule', { schedule: events.Schedule.expression('cron(0 9 ? * 2#1 *)') });
|
|
91
|
+
rule.addTarget(new targets.CodePipeline(pipeline.pipeline));
|
|
92
|
+
PipelineStack.addLifecycleRuleArtifactBucket(pipeline);
|
|
93
|
+
ossLicensesBucket.grantReadWrite(gradlebuild);
|
|
94
|
+
ossLicensesBucketParameter.grantRead(gradlebuild);
|
|
95
|
+
serviceKeystorePassword.grantRead(gradlebuild);
|
|
96
|
+
accountNameParameter.grantRead(gradlebuild);
|
|
97
|
+
pipeline.pipeline.artifactBucket.grantReadWrite(stripAssetsStep.project);
|
|
98
|
+
// Branch pipeline
|
|
99
|
+
const branchBuild = new build_project_1.RioGradleCodeBuildProject(this, 'BranchBuild', {
|
|
100
|
+
input: inputBranchTriggerFile,
|
|
101
|
+
cdkOutDirectory: 'infrastructure/cdk.out',
|
|
102
|
+
buildSpecPath: props.customBuildspecPath || path.resolve(__dirname, 'buildspec.yaml'),
|
|
103
|
+
hostedZoneName: hostedZone.zoneName,
|
|
104
|
+
serviceName: props.serviceName,
|
|
105
|
+
});
|
|
106
|
+
const branchPipeline = new pipelines.CodePipeline(this, 'BranchPipeline', {
|
|
107
|
+
synth: branchBuild,
|
|
108
|
+
selfMutation: false,
|
|
109
|
+
});
|
|
110
|
+
branchPipeline.addWave('BranchBuild').addPost(branchBuild);
|
|
111
|
+
branchPipeline.buildPipeline();
|
|
112
|
+
PipelineStack.addLifecycleRuleArtifactBucket(branchPipeline);
|
|
113
|
+
ossLicensesBucket.grantReadWrite(branchBuild);
|
|
114
|
+
ossLicensesBucketParameter.grantRead(branchBuild);
|
|
115
|
+
serviceKeystorePassword.grantRead(branchBuild);
|
|
116
|
+
accountNameParameter.grantRead(branchBuild);
|
|
117
|
+
// Vulnerability Pipeline
|
|
118
|
+
const vulnerabilityBuild = new build_project_1.RioGradleCodeBuildProject(this, 'VulnerabilityChecks', {
|
|
119
|
+
input: inputMasterTriggerFile,
|
|
120
|
+
buildSpecPath: props.customBuildspecPath || path.resolve(__dirname, 'buildspec-vulnerability-checks.yaml'),
|
|
121
|
+
hostedZoneName: hostedZone.zoneName,
|
|
122
|
+
serviceName: props.serviceName,
|
|
123
|
+
});
|
|
124
|
+
const vulnerabilityPipeline = new pipelines.CodePipeline(this, 'VulnerabilityPipeline', {
|
|
125
|
+
synth: vulnerabilityBuild,
|
|
126
|
+
selfMutation: false,
|
|
127
|
+
});
|
|
128
|
+
vulnerabilityPipeline.addWave('VulnerabilityChecks').addPost(vulnerabilityBuild);
|
|
129
|
+
vulnerabilityPipeline.buildPipeline();
|
|
130
|
+
const vulnerabilityRule = new events.Rule(this, 'VulnerabilityPipelineSchedule', { schedule: events.Schedule.expression('cron(0 5 ? * MON-FRI *)') });
|
|
131
|
+
vulnerabilityRule.addTarget(new targets.CodePipeline(vulnerabilityPipeline.pipeline));
|
|
132
|
+
PipelineStack.addLifecycleRuleArtifactBucket(vulnerabilityPipeline);
|
|
133
|
+
new datadog_monitors_1.DatadogPipelineErrorAlert(this, 'DatadogPipelineErrorMonitor', {
|
|
134
|
+
serviceName: props.serviceName,
|
|
135
|
+
pipelineName: this.renamePipelineToLowerCase(pipeline),
|
|
136
|
+
accountId: this.account,
|
|
137
|
+
});
|
|
138
|
+
new datadog_monitors_1.DataDogPipelineErrorAlertForVulnerabilityChecks(this, 'DataDogPipelineErrorForVulnerabilityChecksMonitor', {
|
|
139
|
+
serviceName: props.serviceName,
|
|
140
|
+
pipelineName: this.renamePipelineToLowerCase(vulnerabilityPipeline),
|
|
141
|
+
accountId: this.account,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
static addLifecycleRuleArtifactBucket(pipeline) {
|
|
145
|
+
const artifactsBucket = pipeline.pipeline.artifactBucket;
|
|
146
|
+
artifactsBucket.addLifecycleRule({
|
|
147
|
+
enabled: true,
|
|
148
|
+
expiration: aws_cdk_lib_1.Duration.days(90),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
renamePipelineToLowerCase(pipeline) {
|
|
152
|
+
const upperToLowerCr = new cdk.CustomResource(this, `${pipeline.node.id}-UpperToLower`, {
|
|
153
|
+
resourceType: 'Custom::UpperToLower',
|
|
154
|
+
serviceToken: upperToLower_1.UpperToLower.getOrCreate(this).provider.serviceToken,
|
|
155
|
+
properties: {
|
|
156
|
+
Upper: pipeline.pipeline.pipelineName,
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
return upperToLowerCr.getAtt('Lower');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
exports.PipelineStack = PipelineStack;
|
|
163
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
164
|
+
PipelineStack[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.PipelineStack", version: "0.0.0" };
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvcGlwZWxpbmUtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsbUNBQW1DO0FBQ25DLDZDQUF5RTtBQUN6RSw2REFBNkQ7QUFDN0QsNkVBQTZFO0FBQzdFLGlEQUFpRDtBQUNqRCwwREFBMEQ7QUFDMUQseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUMzQyxtREFBbUQ7QUFDbkQscURBQXNEO0FBRXRELHNDQUFzQztBQUN0QyxpRUFBOEQ7QUFDOUQsMkRBQWtEO0FBQ2xELG1EQUE0RDtBQUM1RCx5REFBZ0g7QUE0RmhILElBQVksWUFnQlg7QUFoQkQsV0FBWSxZQUFZO0lBRXRCOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILG1EQUFtQyxDQUFBO0FBQ3JDLENBQUMsRUFoQlcsWUFBWSxHQUFaLG9CQUFZLEtBQVosb0JBQVksUUFnQnZCO0FBRUQsTUFBYSxhQUFjLFNBQVEsbUJBQUs7SUFVdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4Qiw2QkFBNkI7UUFDN0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxnQkFBRSxDQUFDLFdBQVcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUM7UUFDbEgsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRSxNQUFNLHNCQUFzQixHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcs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WUFBWSxFQUFFLHNCQUFzQjtZQUNwQyxZQUFZLEVBQUUsMkJBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVk7WUFDbEUsVUFBVSxFQUFFO2dCQUNWLEtBQUssRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFlBQVk7YUFDdEM7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7QUExSkgsc0NBMkpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBEdXJhdGlvbiwgRm4sIFJlZmVyZW5jZSwgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjb2RlcGlwZWxpbmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZSc7XG5pbXBvcnQgKiBhcyBjb2RlcGlwZWxpbmVfYWN0aW9ucyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lLWFjdGlvbnMnO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHNzbSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCAqIGFzIHBpcGVsaW5lcyBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHsgQ29kZUJ1aWxkU3RlcCB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIHJpbyBmcm9tICcuLi8uLi8uLi9pbmRleCc7XG5pbXBvcnQgeyBVcHBlclRvTG93ZXIgfSBmcm9tICcuLi8uLi8uLi93YXRjaGZ1bC91cHBlclRvTG93ZXInO1xuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tICcuL2FwcGxpY2F0aW9uLXN0YWdlJztcbmltcG9ydCB7IFJpb0dyYWRsZUNvZGVCdWlsZFByb2plY3QgfSBmcm9tICcuL2J1aWxkLXByb2plY3QnO1xuaW1wb3J0IHsgRGF0YWRvZ1BpcGVsaW5lRXJyb3JBbGVydCwgRGF0YURvZ1BpcGVsaW5lRXJyb3JBbGVydEZvclZ1bG5lcmFiaWxpdHlDaGVja3MgfSBmcm9tICcuL2RhdGFkb2ctbW9uaXRvcnMnO1xuXG4vKipcbiAgKiBAc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VydmljZVxuICAgKiAtIFRoaXMgaGFzIHRvIGJlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHJlcG9zaXRvcnkgYXMgdGhlIHMzIHRyaWdnZXIgZmlsZSBjcmVhdGVkIGJ5IHRoZSBiaXRidWNrZXQtaW50ZWdyYXRpb24gdXNlcyB0aGlzIGFzIGEgcHJlZml4XG4gICAqIC0gVGhlIHNlcnZpY2VOYW1lIGlzIGF2YWlsYWJsZSBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBTRVJWSUNFX05BTUUgaW4gdGhlIENvZGVCdWlsZFN0ZXBcbiAgICogLSBUaGUgc2VydmljZU5hbWUgaXMgYXZhaWxhYmxlIGluIHRoZSBBcHBTdGFja1Byb3BzIGluIHRoZSBhcHBTdGFja0ZhY3RvcnlcbiAgICogLSBUaGUgc2VydmljZU5hbWUgaXMgYXZhaWxhYmxlIGFzIHN0YWNrTmFtZSBwcm9wZXJ0eSBpbiB0aGUgQXBwU3RhY2tQcm9wcyBpbiB0aGUgYXBwU3RhY2tGYWN0b3J5LiBJLmUuIHRoZSBzdGFjayBpcyBuYW1lZCBhZnRlciB0aGUgc2VydmljZVxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBoYW5kZWQgb3ZlciB0byBhbGwgRGF0YWRvZyBtb25pdG9yc1xuICAgKiAtIFJJTyBjb252ZW50aW9uIGlzIHRoYXQgdXBsb2FkZWQgbGljZW5zZS1jaGVjay1maWxlcyBhcmUgbmFtZWQgYWZ0ZXIgdGhlIHNlcnZpY2UsIGkuZS4gc2VydmljZU5hbWUudHh0XG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlciBmb3IgYXBwU3RhY2sgdG8gYmUgZGVwbG95ZWQuXG4gICAqXG4gICAqIFRoaXMgYWN0cyBhcyBhIHdyYXBwZXIgZm9yIGFsbCByZXNvdXJjZXMgeW91IHdhbnQgdG8gZGVwbG95IHZpYSB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICByZWFkb25seSBhcHBTdGFja0ZhY3Rvcnk6IElBcHBTdGFja0ZhY3Rvcnk7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgd2hpY2gga2luZCBvZiBwaXBlbGluZSBpcyBkZXBsb3llZC5cbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lVHlwZTogUGlwZWxpbmVUeXBlO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIGEgY3VzdG9tIGJ1aWxkc3BlYy55YW1sIHRoYXQgaXMgdXNlZCBpZiBwcm92aWRlZC5cbiAgICpcbiAgICogQSBwcmUtZGVmaW5lZCBidWlsZHNwZWMueWFtbCBmaXR0aW5nIHRoZSBwaXBlbGluZVR5cGUgaXMgdXNlZCBpZiBub3QgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21CdWlsZHNwZWNQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHNlY3JldHMgZmlsZSBjb250YWluaW5nIGVuY3J5cHRlZCBzZWNyZXRzLlxuICAgKlxuICAgKiBUaGUgUmlvU2VjcmV0c0RlcGxveVN0ZXAgaXMgYWRkZWQgcHJpb3IgdG8gZGVwbG95bWVudCBvZiB0aGUgQXBwU3RhY2sgaWYgYSBwYXRoIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBObyBzZWNyZXRzIGFyZSBkZXBsb3llZCBpZiBubyBwYXRoIGlzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0c0RlcGxveVN0ZXBQcm9wcz86IFBpcGVsaW5lU3RhY2tSaW9TZWNyZXRzRGVwbG95U3RlcFByb3BzO1xufVxuXG4vKipcbiAqIFByb3ZpZGVyIGludGVyZmFjZSB0byBjcmVhdGUgdGhlIEFwcFN0YWNrIHdpdGhpbiB0aGUgc3BlY2lmaWMgc2NvcGVcbiAqXG4gKiBTaW1wbHkgcGxhY2UgdGhlIEFwcFN0YWNrIGNyZWF0aW9uIGludG8gdGhlIGNyZWF0ZS1tZXRob2Q6XG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIFVzZSBlLmcuIHdpdGhpbiBBcHBsaWNhdGlvblByb3BzIGFzIEpTT05PYmplY3Q6XG4gKiB7IGNyZWF0ZTogKGNvbnN0cnVjdCwgcHJvcHMpID0+IG5ldyBTdGFjayhjb25zdHJ1Y3QsICdBcHBTdGFjaycsIHByb3BzKSB9XG4gKlxuICogLy8gb3Igc2ltcGx5IGFzIGNsYXNzIGludGVyZmFjZSB3aXRoaW4geW91ciBzdGFjayBpbXBsZW1lbnRhdGlvbjpcbiAqIGNsYXNzIFBpcGVsaW5lU3RhZ2UgZXh0ZW5kcyBTdGFnZSBpbXBsZW1lbnRzIElBcHBTdGFja0ZhY3Rvcnkge1xuICogICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhZ2VQcm9wcykge1xuICogICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICogICAgIC8vIHlvdXIgc3RhZ2UgZGVmaW5pdGlvbVxuICogICB9XG4gKlxuICogICBjcmVhdGUoc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEFwcFN0YWNrUHJvcHMpOiB2b2lkIHtcbiAqICAgICAvLyBhcHAgc3RhY2sgaW5pdGlhdGlvbiBnb2VzIGluIGhlcmVcbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBcHBTdGFja0ZhY3Rvcnkge1xuICAvKipcbiAgICogRmFjdG9yeSBtZXRob2QsIGJlaW5nIGludm9rZWQgd2l0aCB0aGUgc3BlY2lmaWMgc2NvcGUgZHVyaW5nIHBpcGVsaW5lIGluc3RhbnRpYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBwYXJlbnQgY29uc3RydWN0IGZvciB0aGUgYXBwIHN0YWNrXG4gICAqIEBwYXJhbSBwcm9wcyB0aGUgYXBwIHN0YWNrcyBwcm9wZXJ0aWVzXG4gICAqL1xuICBjcmVhdGUoc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEFwcFN0YWNrUHJvcHMgKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWxlY3RlZCBwcm9wZXJ0aWVzIGJlaW5nIGhhbmRlZCBvdmVyIHRvIFJpb1NlY3JldHNEZXBsb3lTdGVwLlxuICpcbiAqIEBzZWUgcmlvLlJpb1NlY3JldHNEZXBsb3lTdGVwXG4gKiBAc2VlIHJpby5SaW9TZWNyZXRzRGVwbG95U3RlcFByb3BzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdGFja1Jpb1NlY3JldHNEZXBsb3lTdGVwUHJvcHMge1xuICByZWFkb25seSBzZWNyZXRzRmlsZVBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gUGlwZWxpbmVUeXBlIHtcblxuICAvKipcbiAgICogU2VsZi1tdXRhdGluZyBjb2RlcGlwZWxpbmUgZGVwbG95aW5nIHRoZSBwcm92aWRlZCBBcHBTdGFjay4gQmUgYXdhcmU6IFRoZSBwcm92aWRlZCBzZXJ2aWNlIHdvbid0IGhhdmUgYWNjZXNzIHRvIEthZmthLlxuICAgKlxuICAgKiBDb21lcyB3aXRoIGEgcHJlLWRlZmluZWQgYnVpbGRzcGVjLnlhbWwgZm9yIGEgZ3JhZGxlIHByb2plY3QuIFRoaXMgYnVpbGRzcGVjLnlhbWwgaXMgdXNlZCBmb3IgYm90aCB0aGUgbWFpbiBhbmRcbiAgICogYnJhbmNoIHBpcGVsaW5lIGFuZCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHN0ZXBzXG4gICAqIC0gYnVpbGQgYW5kIHRlc3Qgb2YgdGhlIGFydGlmYWN0IHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGNsZWFuIGJ1aWxkXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKiAtIGxpY2Vuc2UtY2hlY2sgYW5kIHVwbG9hZCBvZiBsaWNlbnNlLWNoZWNrLWZpbGUgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgY2hlY2tMaWNlbnNlc1wiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICogLSBjcmVhdGUgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSB0byBtYWtlIFRMUyBjb21tdW5pY2F0aW9uIHBvc3NpYmxlLCBlLmcuIHdpdGggYSBsb2FkYmFsYW5jZXIuXG4gICAqIC0gYnVpbGQgdGhlIGNvbnRhaW5lciBpbWFnZSB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBqaWJCdWlsZFRhclwiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICovXG4gIFNUQU5EQVJEX0dSQURMRSA9ICdTVEFOREFSRF9HUkFETEUnLFxufVxuXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgcHJpdmF0ZSBzdGF0aWMgYWRkTGlmZWN5Y2xlUnVsZUFydGlmYWN0QnVja2V0KHBpcGVsaW5lOiBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKSB7XG4gICAgY29uc3QgYXJ0aWZhY3RzQnVja2V0ID0gcGlwZWxpbmUucGlwZWxpbmUuYXJ0aWZhY3RCdWNrZXQ7XG4gICAgKGFydGlmYWN0c0J1Y2tldCBhcyBzMy5CdWNrZXQpLmFkZExpZmVjeWNsZVJ1bGUoe1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoOTApLFxuICAgIH0pO1xuICB9XG5cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyBDcmVhdGluZyB0aGUgbWFpbiBwaXBlbGluZVxuICAgIGNvbnN0IGJ1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZSh0aGlzLCAnVHJpZ2dlckJ1Y2tldCcsIEZuLmltcG9ydFZhbHVlKCdiaXRidWNrZXQtaW50ZWdyYXRpb24tczMtYnVja2V0JykpO1xuICAgIGNvbnN0IGhvc3RlZFpvbmUgPSByaW8uUmlvTGFuZGluZ1pvbmUuZ2V0RGVmYXVsdEhvc3RlZFpvbmUodGhpcyk7XG4gICAgY29uc3QgaW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSA9IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmVTb3VyY2UuczMoYnVja2V0LCBgJHtwcm9wcy5zZXJ2aWNlTmFtZX0vdHJpZ2dlci8ke3Jpby5UcmlnZ2VyS2V5Lk1BU1RFUl9SRVBPfWAsIHsgdHJpZ2dlcjogY29kZXBpcGVsaW5lX2FjdGlvbnMuUzNUcmlnZ2VyLkVWRU5UUyB9KTtcbiAgICBjb25zdCBpbnB1dEJyYW5jaFRyaWdnZXJGaWxlID0gcGlwZWxpbmVzLkNvZGVQaXBlbGluZVNvdXJjZS5zMyhidWNrZXQsIGAke3Byb3BzLnNlcnZpY2VOYW1lfS90cmlnZ2VyLyR7cmlvLlRyaWdnZXJLZXkuQlJBTkNIX1JFUE99YCwgeyB0cmlnZ2VyOiBjb2RlcGlwZWxpbmVfYWN0aW9ucy5TM1RyaWdnZXIuRVZFTlRTIH0pO1xuXG4gICAgY29uc3Qgb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKFxuICAgICAgdGhpcyxcbiAgICAgICdPc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlcicsXG4gICAgICB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6ICcvY29uZmlnL29zcy1saWNlbnNlcy9idWNrZXQtbmFtZScsXG4gICAgICB9LFxuICAgICk7XG4gICAgY29uc3Qgb3NzTGljZW5zZXNCdWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ09zc0xpY2Vuc2VzQnVja2V0JyxcbiAgICAgIG9zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLnN0cmluZ1ZhbHVlLFxuICAgICk7XG4gICAgY29uc3Qgc2VydmljZUtleXN0b3JlUGFzc3dvcmQgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TZWN1cmVTdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKHRoaXMsICdLZXlzdG9yZVBhc3N3b3JkJywge1xuICAgICAgcGFyYW1ldGVyTmFtZTogYC9jb25maWcvJHtwcm9wcy5zZXJ2aWNlTmFtZX0vc2VydmljZS1rZXlzdG9yZS1wYXNzd29yZGAsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgIH0pO1xuICAgIGNvbnN0IGFjY291bnROYW1lUGFyYW1ldGVyID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnQWNjb3VudE5hbWVQYXJhbWV0ZXInLFxuICAgICAgJy9jb25maWcvYWNjb3VudC9uYW1lJyxcbiAgICApO1xuXG4gICAgY29uc3QgZ3JhZGxlYnVpbGQgPSBuZXcgUmlvR3JhZGxlQ29kZUJ1aWxkUHJvamVjdCh0aGlzLCAnR3JhZGxlQnVpbGQnLCB7XG4gICAgICBpbnB1dDogaW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSxcbiAgICAgIGNka091dERpcmVjdG9yeTogJ2luZnJhc3RydWN0dXJlL2Nkay5vdXQnLFxuICAgICAgYnVpbGRTcGVjUGF0aDogcHJvcHMuY3VzdG9tQnVpbGRzcGVjUGF0aCB8fCBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnYnVpbGRzcGVjLnlhbWwnKSxcbiAgICAgIGhvc3RlZFpvbmVOYW1lOiBob3N0ZWRab25lLnpvbmVOYW1lLFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcGlwZWxpbmUgPSBuZXcgcGlwZWxpbmVzLkNvZGVQaXBlbGluZSh0aGlzLCAnUGlwZWxpbmUnLCB7XG4gICAgICBzeW50aDogZ3JhZGxlYnVpbGQsXG4gICAgfSk7XG5cbiAgICAvLyBDbG91ZEFzc2VtYmx5QXJ0aWZhY3RzIG11c3QgYmUgc21hbGxlciB0aGFuIDI1Nk1CLiBEdWUgdG8gdGhlIGdyYWRsZSBhcnRpZmFjdCB3ZSBhcmUgZXhjZWVkaW5nIHRoaXMgbGltaXQgYW5kIHBpcGVsaW5lIGZhaWxzIGluIGRlcGxveW1lbnQgc3RlcC5cbiAgICAvLyBJc3N1ZSBpcyBrbm93biBhbmQgbm90IGZpeGVkIGZvciBhbHJlYWR5IHNvbWUgeWVhcnMuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy85OTE3XG4gICAgLy8gRGlydHkgZml4OiBBc3NldHMgYXJlIGFscmVhZHkgdXBsb2FkZWQgYW5kIHRodXMgbm90IG5lZWRlZC4gUmVtb3ZlIHRoZW0gZnJvbSBwaXBlbGluZSBhcnRpZmFjdC5cbiAgICBjb25zdCBzdHJpcEFzc2V0c1N0ZXAgPSBuZXcgQ29kZUJ1aWxkU3RlcChcbiAgICAgICdTdHJpcEFzc2V0c0Zyb21Bc3NlbWJseScsIHtcbiAgICAgICAgaW5wdXQ6IHBpcGVsaW5lLmNsb3VkQXNzZW1ibHlGaWxlU2V0LFxuICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICdTM19QQVRIPSR7Q09ERUJVSUxEX1NPVVJDRV9WRVJTSU9OI1wiYXJuOmF3czpzMzo6OlwifScsXG4gICAgICAgICAgJ1pJUF9BUkNISVZFPSQoYmFzZW5hbWUgJFMzX1BBVEgpJyxcbiAgICAgICAgICAncm0gLXJmdiBhc3NldC4qJyxcbiAgICAgICAgICAnemlwIC1yIC1xIC1BICRaSVBfQVJDSElWRSAqJyxcbiAgICAgICAgICAnYXdzIHMzIGNwICRaSVBfQVJDSElWRSBzMzovLyRTM19QQVRIJyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHBpcGVsaW5lLmFkZFdhdmUoJ0JlZm9yZURlcGxveScsIHsgcHJlOiBbc3RyaXBBc3NldHNTdGVwXSB9KTtcblxuICAgIHBpcGVsaW5lLmFkZFN0YWdlKG5ldyBBcHBsaWNhdGlvbih0aGlzLCAnRGVwbG95QXBwbGljYXRpb25TdGFja3MnLCB7XG4gICAgICBhcHBTdGFja0ZhY3Rvcnk6IHByb3BzLmFwcFN0YWNrRmFjdG9yeSxcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb246IGNvZGVwaXBlbGluZS5HbG9iYWxWYXJpYWJsZXMuZXhlY3V0aW9uSWQsXG4gICAgfSksIHtcbiAgICAgIHByZTogcHJvcHMuc2VjcmV0c0RlcGxveVN0ZXBQcm9wcyA/IFtcbiAgICAgICAgbmV3IHJpby5SaW9TZWNyZXRzRGVwbG95U3RlcCh0aGlzLCAnRGVwbG95U2VjcmV0cycsIHsgLi4ucHJvcHMuc2VjcmV0c0RlcGxveVN0ZXBQcm9wcywgaW5wdXQ6IGlucHV0TWFzdGVyVHJpZ2dlckZpbGUgfSksXG4gICAgICBdIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIHBpcGVsaW5lLmJ1aWxkUGlwZWxpbmUoKTtcblxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ1BpcGVsaW5lU2NoZWR1bGUnLCB7IHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuZXhwcmVzc2lvbignY3JvbigwIDkgPyAqIDIjMSAqKScpIH0pO1xuICAgIHJ1bGUuYWRkVGFyZ2V0KG5ldyB0YXJnZXRzLkNvZGVQaXBlbGluZShwaXBlbGluZS5waXBlbGluZSkpO1xuXG4gICAgUGlwZWxpbmVTdGFjay5hZGRMaWZlY3ljbGVSdWxlQXJ0aWZhY3RCdWNrZXQocGlwZWxpbmUpO1xuICAgIG9zc0xpY2Vuc2VzQnVja2V0LmdyYW50UmVhZFdyaXRlKGdyYWRsZWJ1aWxkKTtcbiAgICBvc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlci5ncmFudFJlYWQoZ3JhZGxlYnVpbGQpO1xuICAgIHNlcnZpY2VLZXlzdG9yZVBhc3N3b3JkLmdyYW50UmVhZChncmFkbGVidWlsZCk7XG4gICAgYWNjb3VudE5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKGdyYWRsZWJ1aWxkKTtcbiAgICBwaXBlbGluZS5waXBlbGluZS5hcnRpZmFjdEJ1Y2tldC5ncmFudFJlYWRXcml0ZShzdHJpcEFzc2V0c1N0ZXAucHJvamVjdCk7XG5cbiAgICAvLyBCcmFuY2ggcGlwZWxpbmVcbiAgICBjb25zdCBicmFuY2hCdWlsZCA9IG5ldyBSaW9HcmFkbGVDb2RlQnVpbGRQcm9qZWN0KHRoaXMsICdCcmFuY2hCdWlsZCcsIHtcbiAgICAgIGlucHV0OiBpbnB1dEJyYW5jaFRyaWdnZXJGaWxlLFxuICAgICAgY2RrT3V0RGlyZWN0b3J5OiAnaW5mcmFzdHJ1Y3R1cmUvY2RrLm91dCcsXG4gICAgICBidWlsZFNwZWNQYXRoOiBwcm9wcy5jdXN0b21CdWlsZHNwZWNQYXRoIHx8IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdidWlsZHNwZWMueWFtbCcpLFxuICAgICAgaG9zdGVkWm9uZU5hbWU6IGhvc3RlZFpvbmUuem9uZU5hbWUsXG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgfSk7XG4gICAgY29uc3QgYnJhbmNoUGlwZWxpbmUgPSBuZXcgcGlwZWxpbmVzLkNvZGVQaXBlbGluZSh0aGlzLCAnQnJhbmNoUGlwZWxpbmUnLCB7XG4gICAgICBzeW50aDogYnJhbmNoQnVpbGQsXG4gICAgICBzZWxmTXV0YXRpb246IGZhbHNlLFxuICAgIH0pO1xuICAgIGJyYW5jaFBpcGVsaW5lLmFkZFdhdmUoJ0JyYW5jaEJ1aWxkJykuYWRkUG9zdChicmFuY2hCdWlsZCk7XG4gICAgYnJhbmNoUGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuXG4gICAgUGlwZWxpbmVTdGFjay5hZGRMaWZlY3ljbGVSdWxlQXJ0aWZhY3RCdWNrZXQoYnJhbmNoUGlwZWxpbmUpO1xuICAgIG9zc0xpY2Vuc2VzQnVja2V0LmdyYW50UmVhZFdyaXRlKGJyYW5jaEJ1aWxkKTtcbiAgICBvc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlci5ncmFudFJlYWQoYnJhbmNoQnVpbGQpO1xuICAgIHNlcnZpY2VLZXlzdG9yZVBhc3N3b3JkLmdyYW50UmVhZChicmFuY2hCdWlsZCk7XG4gICAgYWNjb3VudE5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKGJyYW5jaEJ1aWxkKTtcblxuICAgIC8vIFZ1bG5lcmFiaWxpdHkgUGlwZWxpbmVcbiAgICBjb25zdCB2dWxuZXJhYmlsaXR5QnVpbGQgPSBuZXcgUmlvR3JhZGxlQ29kZUJ1aWxkUHJvamVjdCh0aGlzLCAnVnVsbmVyYWJpbGl0eUNoZWNrcycsIHtcbiAgICAgIGlucHV0OiBpbnB1dE1hc3RlclRyaWdnZXJGaWxlLFxuICAgICAgYnVpbGRTcGVjUGF0aDogcHJvcHMuY3VzdG9tQnVpbGRzcGVjUGF0aCB8fCBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnYnVpbGRzcGVjLXZ1bG5lcmFiaWxpdHktY2hlY2tzLnlhbWwnKSxcbiAgICAgIGhvc3RlZFpvbmVOYW1lOiBob3N0ZWRab25lLnpvbmVOYW1lLFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgIH0pO1xuICAgIGNvbnN0IHZ1bG5lcmFiaWxpdHlQaXBlbGluZSA9IG5ldyBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKHRoaXMsICdWdWxuZXJhYmlsaXR5UGlwZWxpbmUnLCB7XG4gICAgICBzeW50aDogdnVsbmVyYWJpbGl0eUJ1aWxkLFxuICAgICAgc2VsZk11dGF0aW9uOiBmYWxzZSxcbiAgICB9KTtcbiAgICB2dWxuZXJhYmlsaXR5UGlwZWxpbmUuYWRkV2F2ZSgnVnVsbmVyYWJpbGl0eUNoZWNrcycpLmFkZFBvc3QodnVsbmVyYWJpbGl0eUJ1aWxkKTtcbiAgICB2dWxuZXJhYmlsaXR5UGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuXG4gICAgY29uc3QgdnVsbmVyYWJpbGl0eVJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ1Z1bG5lcmFiaWxpdHlQaXBlbGluZVNjaGVkdWxlJywgeyBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmV4cHJlc3Npb24oJ2Nyb24oMCA1ID8gKiBNT04tRlJJICopJykgfSk7XG4gICAgdnVsbmVyYWJpbGl0eVJ1bGUuYWRkVGFyZ2V0KG5ldyB0YXJnZXRzLkNvZGVQaXBlbGluZSh2dWxuZXJhYmlsaXR5UGlwZWxpbmUucGlwZWxpbmUpKTtcblxuICAgIFBpcGVsaW5lU3RhY2suYWRkTGlmZWN5Y2xlUnVsZUFydGlmYWN0QnVja2V0KHZ1bG5lcmFiaWxpdHlQaXBlbGluZSk7XG5cbiAgICBuZXcgRGF0YWRvZ1BpcGVsaW5lRXJyb3JBbGVydCh0aGlzLCAnRGF0YWRvZ1BpcGVsaW5lRXJyb3JNb25pdG9yJywge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgcGlwZWxpbmVOYW1lOiB0aGlzLnJlbmFtZVBpcGVsaW5lVG9Mb3dlckNhc2UocGlwZWxpbmUpLFxuICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgfSk7XG5cbiAgICBuZXcgRGF0YURvZ1BpcGVsaW5lRXJyb3JBbGVydEZvclZ1bG5lcmFiaWxpdHlDaGVja3ModGhpcywgJ0RhdGFEb2dQaXBlbGluZUVycm9yRm9yVnVsbmVyYWJpbGl0eUNoZWNrc01vbml0b3InLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBwaXBlbGluZU5hbWU6IHRoaXMucmVuYW1lUGlwZWxpbmVUb0xvd2VyQ2FzZSh2dWxuZXJhYmlsaXR5UGlwZWxpbmUpLFxuICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbmFtZVBpcGVsaW5lVG9Mb3dlckNhc2UocGlwZWxpbmU6IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUpOiBSZWZlcmVuY2Uge1xuICAgIGNvbnN0IHVwcGVyVG9Mb3dlckNyID0gbmV3IGNkay5DdXN0b21SZXNvdXJjZSh0aGlzLCBgJHtwaXBlbGluZS5ub2RlLmlkfS1VcHBlclRvTG93ZXJgLCB7XG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OlVwcGVyVG9Mb3dlcicsXG4gICAgICBzZXJ2aWNlVG9rZW46IFVwcGVyVG9Mb3dlci5nZXRPckNyZWF0ZSh0aGlzKS5wcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIFVwcGVyOiBwaXBlbGluZS5waXBlbGluZS5waXBlbGluZU5hbWUsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiB1cHBlclRvTG93ZXJDci5nZXRBdHQoJ0xvd2VyJyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -52,7 +52,7 @@ class DatadogLogDailyQuotaMonitor extends datadogMonitor_1.DatadogMonitor {
|
|
|
52
52
|
monitor: {
|
|
53
53
|
name: 'Log quota almost reached',
|
|
54
54
|
type: 'metric alert',
|
|
55
|
-
query: `sum(
|
|
55
|
+
query: `sum(last_1d):sum:datadog.estimated_usage.logs.ingested_events{datadog_is_excluded:false,datadog_index:${props.indexName}}.as_count() >= ${alertThreshold}`,
|
|
56
56
|
message: `[P3] Inspect your log volume at ${datadogLogsSearchWithIndexFilterDeepLink(props.indexName)} or adapt the log quota at ${datadogLogsIndexesConfigurationDeepLink}`,
|
|
57
57
|
options: {
|
|
58
58
|
thresholds: {
|
|
@@ -60,7 +60,7 @@ class DatadogLogDailyQuotaMonitor extends datadogMonitor_1.DatadogMonitor {
|
|
|
60
60
|
warning: warningThreshold,
|
|
61
61
|
},
|
|
62
62
|
include_tags: false,
|
|
63
|
-
notify_no_data: props.sparseLogging
|
|
63
|
+
notify_no_data: !props.sparseLogging,
|
|
64
64
|
no_data_timeframe: 24 * 60,
|
|
65
65
|
},
|
|
66
66
|
},
|
|
@@ -79,7 +79,7 @@ class DatadogLogsAnomalyMonitor extends datadogMonitor_1.DatadogMonitor {
|
|
|
79
79
|
message: `[P4] Logs are getting out of control: ${datadogLogsSearchWithIndexFilterDeepLink(props.indexName)}`,
|
|
80
80
|
options: {
|
|
81
81
|
include_tags: false,
|
|
82
|
-
notify_no_data: props.sparseLogging
|
|
82
|
+
notify_no_data: !props.sparseLogging,
|
|
83
83
|
threshold_windows: {
|
|
84
84
|
trigger_window: 'last_15m',
|
|
85
85
|
recovery_window: 'last_15m',
|
|
@@ -113,4 +113,4 @@ function datadogLogsSearchWithIndexFilterDeepLink(indexName) {
|
|
|
113
113
|
return `https://app.datadoghq.eu/logs?index=${indexName}`;
|
|
114
114
|
}
|
|
115
115
|
const datadogLogsIndexesConfigurationDeepLink = 'https://app.datadoghq.eu/logs/pipelines/indexes';
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhZG9nL2RhdGFkb2dMb2dJbmRleE1vbml0b3JpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBdUM7QUFDdkMscURBQW9FO0FBbURwRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLHlCQUEwQixTQUFRLHNCQUFTO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLDJCQUEyQixDQUFDLElBQUksRUFBRSw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLHlCQUF5QixDQUFDLElBQUksRUFBRSwrQkFBK0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLGtDQUFrQyxDQUFDLElBQUksRUFBRSxzQ0FBc0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU1RixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0QixRQUFRLEVBQUUsR0FBYSxFQUFFO2dCQUN2QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLEVBQUU7b0JBQzVHLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkVBQTJFLENBQUMsQ0FBQztpQkFDMUY7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsRUFBRTtvQkFDeEcsTUFBTSxDQUFDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO2lCQUN4RjtnQkFDRCxJQUFJLEtBQUssQ0FBQyxhQUFh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VztZQUM5QixVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQzdCLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixJQUFJLEVBQUUsZ0JBQWdCO2dCQUN0QixLQUFLLEVBQUUsd0NBQXdDLEtBQUssQ0FBQyxTQUFTLHVEQUF1RDtnQkFDckgsT0FBTyxFQUFFLDBGQUEwRix1Q0FBdUMsdUVBQXVFO2dCQUNqTixPQUFPLEVBQUU7b0JBQ1AsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsVUFBVSxFQUFFO3dCQUNWLFFBQVEsRUFBRSxDQUFDO3FCQUNaO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxTQUFTLHdDQUF3QyxDQUFDLFNBQWlCO0lBQ2pFLE9BQU8sdUNBQXVDLFNBQVMsRUFBRSxDQUFDO0FBQzVELENBQUM7QUFFRCxNQUFNLHVDQUF1QyxHQUFHLGlEQUFpRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBEYXRhZG9nTW9uaXRvciwgRGF0YWRvZ0FsZXJ0VHlwZSB9IGZyb20gJy4vZGF0YWRvZ01vbml0b3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFkb2dMb2dJbmRleE1vbml0b3JpbmdQcm9wcyB7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHlvdXIgc2VydmljZSBpbiBEYXRhZG9nLiBDYW4gYmUgdXNlZCB0byBxdWVyeSB0aGUgbW9uaXRvcnMuXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgRGF0YWRvZyBpbmRleC5cbiAgICovXG4gIHJlYWRvbmx5IGluZGV4TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdG8gdXNlIGZvciBhbGVydGluZy5cbiAgICogRm9yIE9wc0dlbmllLCB5b3UgbmVlZCB0byBpbnN0YWxsIGFuZCBjb25maWd1cmUgdGhlICdvcHNnZW5pZS1pbnRlZ3JhdGlvbicgYWNjb3VudCBtb2R1bGUuXG4gICAqL1xuICByZWFkb25seSBhbGVydFR5cGU6IERhdGFkb2dBbGVydFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBkYWlseSBsb2cgcXVvdGEgc2V0dGluZ3MuXG4gICAqL1xuICByZWFkb25seSBkYWlseUxvZ1F1b3RhOiBEYXRhZG9nTG9nUXVvdGFQcm9wcztcblxuICAvKipcbiAgICogVGhpcyB2YWx1ZSBzaG91bGQgYmUgdXNlZCBpZiB0aGVyZSBpcyBubyBsb2cgbWVzc2FnZSB3aXRoaW4gMjQgaG91cnMgb3IgbWlzc2luZyBoaXN0b3JpY2FsIGRhdGEuXG4gICAqIFdpdGhvdXQgc2V0dGluZyB0aGlzIHZhbHVlIGl0IHdpbGwgbGVhZCB0byBhbiBlbXB0eSByZXN1bHQgYW5kIHRoZXJlZm9yZSB0cmlnZ2VyIGFuIGFsZXJ0LlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzcGFyc2VMb2dnaW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhZG9nTG9nUXVvdGFQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZGFpbHkgbG9nIHF1b3RhIGZvciB0aGUgdGVhbS1zcGVjaWZpYyBpbmRleCBpbiBtaWxsaW9uIGV2ZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlSW5NaWxsaW9uRXZlbnRzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB3YXJuaW5nIHRocmVzaG9sZCBmb3IgdGhlIGRhaWx5IGxvZyBxdW90YSBtb25pdG9yIGluIHBlcmNlbnQuXG4gICAqL1xuICByZWFkb25seSB3YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBhbGFybSB0aHJlc2hvbGQgZm9yIHRoZSBkYWlseSBsb2cgcXVvdGEgbW9uaXRvciBpbiBwZXJjZW50LlxuICAgKiBUaGUgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEwMCBhbmQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB3YXJuaW5nIHRocmVzaG9sZC5cbiAgICovXG4gIHJlYWRvbmx5IGFsZXJ0VGhyZXNob2xkSW5QZXJjZW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogQmFzaWMgbW9uaXRvcmluZyBhbmQgYWxlcnRpbmcgZm9yIGEgRGF0YWRvZyBsb2dzIGluZGV4LlxuICogSXQgZm9sbG93cyB0aGUgRGF0YWRvZyBndWlkZSBhdCBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9sb2dzL2d1aWRlL2xvZ3MtbW9uaXRvcnMtb24tdm9sdW1lcy9cbiAqIGFuZCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHRocmVlIG1vbml0b3JzLlxuICogICAxLiBBIG1ldHJpYyBhbGVydCB0aGF0IGZpcmVzIHdoZW4geW91IHJlYWNoIGEgY2VydGFpbiB0aHJlc2hvbGQgb2YgeW91ciBkYWlseSBsb2cgcXVvdGEuXG4gKiAgIDIuIEFuIGFub21hbHkgbW9uaXRvciB0aGF0IGRldGVjdHMgbG9nIGFtb3VudCBzcGlrZXMuXG4gKiAgIDMuIEFuIGV2ZW50IGFsZXJ0IHRoYXQgZmlyZXMgd2hlbiB5b3UgaGl0IHRoZSBkYWlseSBsb2cgcXVvdGEuXG4gKlxuICogQSBkYXRhZG9nIGxvZyBpbmRleCBpcyB0ZWFtIHNwZWNpZmljIGFuZCB0aHVzIHRoZSBtb25pdG9yIG5lZWRzIHRvIGJlIGRlcGxveWVkIGp1c3Qgb25jZSBwZXIgaW5kZXgvdGVhbS5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFkb2dMb2dJbmRleE1vbml0b3JpbmcgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBEYXRhZG9nTG9nRGFpbHlRdW90YU1vbml0b3IodGhpcywgJ0RhdGFkb2dMb2dEYWlseVF1b3RhTW9uaXRvcicsIHByb3BzKTtcbiAgICBuZXcgRGF0YWRvZ0xvZ3NBbm9tYWx5TW9uaXRvcih0aGlzLCAnRGF0YWRvZ0xvZ0FsZXJ0QW5vbWFseU1vbml0b3InLCBwcm9wcyk7XG4gICAgbmV3IERhdGFkb2dMb2dEYWlseVF1b3RhUmVhY2hlZE1vbml0b3IodGhpcywgJ0RhdGFkb2dMb2dEYWlseVF1b3RhUmVhY2hlZFYyTW9uaXRvcicsIHByb3BzKTtcblxuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKHtcbiAgICAgIHZhbGlkYXRlOiAoKTogc3RyaW5nW10gPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgaWYgKHByb3BzLmRhaWx5TG9nUXVvdGEud2FybmluZ1RocmVzaG9sZEluUGVyY2VudCA8IDAgfHwgcHJvcHMuZGFpbHlMb2dRdW90YS53YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50ID4gMTAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goJ0ludmFsaWQgW3dhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnRdOiBleHBlY3RpbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxMDAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMuZGFpbHlMb2dRdW90YS5hbGVydFRocmVzaG9sZEluUGVyY2VudCA8IDAgfHwgcHJvcHMuZGFpbHlMb2dRdW90YS5hbGVydFRocmVzaG9sZEluUGVyY2VudCA+IDEwMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFthbGVydFRocmVzaG9sZEluUGVyY2VudF06IGV4cGVjdGluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwMCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5kYWlseUxvZ1F1b3RhLmFsZXJ0VGhyZXNob2xkSW5QZXJjZW50IDwgcHJvcHMuZGFpbHlMb2dRdW90YS53YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50KSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goJ0ludmFsaWQgW2FsZXJ0VGhyZXNob2xkSW5QZXJjZW50XTogbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3dhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnRdJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgRGF0YWRvZ0xvZ0RhaWx5UXVvdGFNb25pdG9yIGV4dGVuZHMgRGF0YWRvZ01vbml0b3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgY29uc3QgbG9nUXVvdGFJbkV2ZW50cyA9IE1hdGguZmxvb3IocHJvcHMuZGFpbHlMb2dRdW90YS52YWx1ZUluTWlsbGlvbkV2ZW50cyAqIDFfMDAwXzAwMCk7XG4gICAgY29uc3Qgd2FybmluZ1RocmVzaG9sZCA9IE1hdGguZmxvb3IobG9nUXVvdGFJbkV2ZW50cyAqIChwcm9wcy5kYWlseUxvZ1F1b3RhLndhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQgLyAxMDApKTtcbiAgICBjb25zdCBhbGVydFRocmVzaG9sZCA9IE1hdGguZmxvb3IobG9nUXVvdGFJbkV2ZW50cyAqIChwcm9wcy5kYWlseUxvZ1F1b3RhLmFsZXJ0VGhyZXNob2xkSW5QZXJjZW50IC8gMTAwKSk7XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIGFsZXJ0VHlwZXM6IFtwcm9wcy5hbGVydFR5cGVdLFxuICAgICAgbW9uaXRvcjoge1xuICAgICAgICBuYW1lOiAnTG9nIHF1b3RhIGFsbW9zdCByZWFjaGVkJyxcbiAgICAgICAgdHlwZTogJ21ldHJpYyBhbGVydCcsXG4gICAgICAgIHF1ZXJ5OiBgc3VtKGxhc3RfNW0pOnN1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5sb2dzLmluZ2VzdGVkX2V2ZW50c3tkYXRhZG9nX2lzX2V4Y2x1ZGVkOmZhbHNlLGRhdGFkb2dfaW5kZXg6JHtwcm9wcy5pbmRleE5hbWV9fS5hc19jb3VudCgpLnJvbGx1cChzdW0sIDg2NDAwKSA+PSAke2FsZXJ0VGhyZXNob2xkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGBbUDNdIEluc3BlY3QgeW91ciBsb2cgdm9sdW1lIGF0ICR7ZGF0YWRvZ0xvZ3NTZWFyY2hXaXRoSW5kZXhGaWx0ZXJEZWVwTGluayhcbiAgICAgICAgICBwcm9wcy5pbmRleE5hbWUsXG4gICAgICAgICl9IG9yIGFkYXB0IHRoZSBsb2cgcXVvdGEgYXQgJHtkYXRhZG9nTG9nc0luZGV4ZXNDb25maWd1cmF0aW9uRGVlcExpbmt9YCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHRocmVzaG9sZHM6IHtcbiAgICAgICAgICAgIGNyaXRpY2FsOiBhbGVydFRocmVzaG9sZCxcbiAgICAgICAgICAgIHdhcm5pbmc6IHdhcm5pbmdUaHJlc2hvbGQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbmNsdWRlX3RhZ3M6IGZhbHNlLFxuICAgICAgICAgIG5vdGlmeV9ub19kYXRhOiBwcm9wcy5zcGFyc2VMb2dnaW5nID8gZmFsc2UgOiB0cnVlLFxuICAgICAgICAgIG5vX2RhdGFfdGltZWZyYW1lOiAyNCAqIDYwLCAvLyAxIGRheVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBEYXRhZG9nTG9nc0Fub21hbHlNb25pdG9yIGV4dGVuZHMgRGF0YWRvZ01vbml0b3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBhbGVydFR5cGVzOiBbcHJvcHMuYWxlcnRUeXBlXSxcbiAgICAgIG1vbml0b3I6IHtcbiAgICAgICAgbmFtZTogJ0xvZyBhbW91bnQgaXMgcmlzaW5nIHRvIHVuZXhwZWN0ZWQgbGV2ZWxzJyxcbiAgICAgICAgdHlwZTogJ21ldHJpYyBhbGVydCcsXG4gICAgICAgIHF1ZXJ5OiBgYXZnKGxhc3RfNGgpOmFub21hbGllcyhzdW06ZGF0YWRvZy5lc3RpbWF0ZWRfdXNhZ2UubG9ncy5pbmdlc3RlZF9ldmVudHN7ZGF0YWRvZ19pc19leGNsdWRlZDpmYWxzZSxkYXRhZG9nX2luZGV4OiR7cHJvcHMuaW5kZXhOYW1lfX0uYXNfY291bnQoKSwgJ3JvYnVzdCcsIDIsIGRpcmVjdGlvbj0nYWJvdmUnLCBhbGVydF93aW5kb3c9J2xhc3RfMTVtJywgaW50ZXJ2YWw9NjAsIGNvdW50X2RlZmF1bHRfemVybz0ndHJ1ZScsIHNlYXNvbmFsaXR5PSd3ZWVrbHknLCB0aW1lem9uZT0nZXVyb3BlL2JlcmxpbicpID49IDFgLFxuICAgICAgICBtZXNzYWdlOiBgW1A0XSBMb2dzIGFyZSBnZXR0aW5nIG91dCBvZiBjb250cm9sOiAke2RhdGFkb2dMb2dzU2VhcmNoV2l0aEluZGV4RmlsdGVyRGVlcExpbmsoXG4gICAgICAgICAgcHJvcHMuaW5kZXhOYW1lLFxuICAgICAgICApfWAsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBpbmNsdWRlX3RhZ3M6IGZhbHNlLFxuICAgICAgICAgIG5vdGlmeV9ub19kYXRhOiBwcm9wcy5zcGFyc2VMb2dnaW5nID8gZmFsc2UgOiB0cnVlLFxuICAgICAgICAgIHRocmVzaG9sZF93aW5kb3dzOiB7XG4gICAgICAgICAgICB0cmlnZ2VyX3dpbmRvdzogJ2xhc3RfMTVtJyxcbiAgICAgICAgICAgIHJlY292ZXJ5X3dpbmRvdzogJ2xhc3RfMTVtJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBEYXRhZG9nTG9nRGFpbHlRdW90YVJlYWNoZWRNb25pdG9yIGV4dGVuZHMgRGF0YWRvZ01vbml0b3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBhbGVydFR5cGVzOiBbcHJvcHMuYWxlcnRUeXBlXSxcbiAgICAgIG1vbml0b3I6IHtcbiAgICAgICAgbmFtZTogJ0xvZyBxdW90YSByZWFjaGVkJyxcbiAgICAgICAgdHlwZTogJ2V2ZW50LXYyIGFsZXJ0JyxcbiAgICAgICAgcXVlcnk6IGBldmVudHMoXCJzb3VyY2U6ZGF0YWRvZyBkYXRhZG9nX2luZGV4OiR7cHJvcHMuaW5kZXhOYW1lfSBEYWlseSBxdW90YSByZWFjaGVkXCIpLnJvbGx1cChcImNvdW50XCIpLmxhc3QoXCI1bVwiKSA+IDBgLFxuICAgICAgICBtZXNzYWdlOiBgW1AyXSBUaGUgbG9nIHF1b3RlIGZvciB0aGUgaW5kZXggaGFzIGJlZW4gcmVhY2hlZC4gSWYgeW91IGRvIG5vdCBpbmNyZWFzZSB0aGUgcXVvdGEgYXQgJHtkYXRhZG9nTG9nc0luZGV4ZXNDb25maWd1cmF0aW9uRGVlcExpbmt9LCBubyBuZXcgbG9ncyB3aWxsIGJlIGluZGV4ZWQgdW50aWwgdGhlIHF1b3RhIGlzIHJlc2V0IGF0IDI6MDBwbSBVVEMuYCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHRpbWVvdXRfaDogMjQsXG4gICAgICAgICAgdGhyZXNob2xkczoge1xuICAgICAgICAgICAgY3JpdGljYWw6IDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGF0YWRvZ0xvZ3NTZWFyY2hXaXRoSW5kZXhGaWx0ZXJEZWVwTGluayhpbmRleE5hbWU6IHN0cmluZykge1xuICByZXR1cm4gYGh0dHBzOi8vYXBwLmRhdGFkb2docS5ldS9sb2dzP2luZGV4PSR7aW5kZXhOYW1lfWA7XG59XG5cbmNvbnN0IGRhdGFkb2dMb2dzSW5kZXhlc0NvbmZpZ3VyYXRpb25EZWVwTGluayA9ICdodHRwczovL2FwcC5kYXRhZG9naHEuZXUvbG9ncy9waXBlbGluZXMvaW5kZXhlcyc7XG4iXX0=
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhZG9nL2RhdGFkb2dMb2dJbmRleE1vbml0b3JpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBdUM7QUFDdkMscURBQW9FO0FBbURwRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLHlCQUEwQixTQUFRLHNCQUFTO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLDJCQUEyQixDQUFDLElBQUksRUFBRSw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLHlCQUF5QixDQUFDLElBQUksRUFBRSwrQkFBK0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxJQUFJLGtDQUFrQyxDQUFDLElBQUksRUFBRSxzQ0FBc0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU1RixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0QixRQUFRLEVBQUUsR0FBYSxFQUFFO2dCQUN2QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLEVBQUU7b0JBQzVHLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkVBQTJFLENBQUMsQ0FBQztpQkFDMUY7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsRUFBRTtvQkFDeEcsTUFBTSxDQUFDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO2lCQUN4RjtnQkFDRCxJQUFJLEtBQUssQ0FBQyxhQUFh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RUFBRSxtQkFBbUI7Z0JBQ3pCLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLEtBQUssRUFBRSx3Q0FBd0MsS0FBSyxDQUFDLFNBQVMsdURBQXVEO2dCQUNySCxPQUFPLEVBQUUsMEZBQTBGLHVDQUF1Qyx1RUFBdUU7Z0JBQ2pOLE9BQU8sRUFBRTtvQkFDUCxTQUFTLEVBQUUsRUFBRTtvQkFDYixVQUFVLEVBQUU7d0JBQ1YsUUFBUSxFQUFFLENBQUM7cUJBQ1o7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVELFNBQVMsd0NBQXdDLENBQUMsU0FBaUI7SUFDakUsT0FBTyx1Q0FBdUMsU0FBUyxFQUFFLENBQUM7QUFDNUQsQ0FBQztBQUVELE1BQU0sdUNBQXVDLEdBQUcsaURBQWlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IERhdGFkb2dNb25pdG9yLCBEYXRhZG9nQWxlcnRUeXBlIH0gZnJvbSAnLi9kYXRhZG9nTW9uaXRvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzIHtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgeW91ciBzZXJ2aWNlIGluIERhdGFkb2cuIENhbiBiZSB1c2VkIHRvIHF1ZXJ5IHRoZSBtb25pdG9ycy5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBEYXRhZG9nIGluZGV4LlxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlZ3JhdGlvbiB0byB1c2UgZm9yIGFsZXJ0aW5nLlxuICAgKiBGb3IgT3BzR2VuaWUsIHlvdSBuZWVkIHRvIGluc3RhbGwgYW5kIGNvbmZpZ3VyZSB0aGUgJ29wc2dlbmllLWludGVncmF0aW9uJyBhY2NvdW50IG1vZHVsZS5cbiAgICovXG4gIHJlYWRvbmx5IGFsZXJ0VHlwZTogRGF0YWRvZ0FsZXJ0VHlwZTtcblxuICAvKipcbiAgICogVGhlIGRhaWx5IGxvZyBxdW90YSBzZXR0aW5ncy5cbiAgICovXG4gIHJlYWRvbmx5IGRhaWx5TG9nUXVvdGE6IERhdGFkb2dMb2dRdW90YVByb3BzO1xuXG4gIC8qKlxuICAgKiBUaGlzIHZhbHVlIHNob3VsZCBiZSB1c2VkIGlmIHRoZXJlIGlzIG5vIGxvZyBtZXNzYWdlIHdpdGhpbiAyNCBob3VycyBvciBtaXNzaW5nIGhpc3RvcmljYWwgZGF0YS5cbiAgICogV2l0aG91dCBzZXR0aW5nIHRoaXMgdmFsdWUgaXQgd2lsbCBsZWFkIHRvIGFuIGVtcHR5IHJlc3VsdCBhbmQgdGhlcmVmb3JlIHRyaWdnZXIgYW4gYWxlcnQuXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNwYXJzZUxvZ2dpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFkb2dMb2dRdW90YVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBkYWlseSBsb2cgcXVvdGEgZm9yIHRoZSB0ZWFtLXNwZWNpZmljIGluZGV4IGluIG1pbGxpb24gZXZlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVJbk1pbGxpb25FdmVudHM6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHdhcm5pbmcgdGhyZXNob2xkIGZvciB0aGUgZGFpbHkgbG9nIHF1b3RhIG1vbml0b3IgaW4gcGVyY2VudC5cbiAgICovXG4gIHJlYWRvbmx5IHdhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGFsYXJtIHRocmVzaG9sZCBmb3IgdGhlIGRhaWx5IGxvZyBxdW90YSBtb25pdG9yIGluIHBlcmNlbnQuXG4gICAqIFRoZSB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTAwIGFuZCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHdhcm5pbmcgdGhyZXNob2xkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxlcnRUaHJlc2hvbGRJblBlcmNlbnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCYXNpYyBtb25pdG9yaW5nIGFuZCBhbGVydGluZyBmb3IgYSBEYXRhZG9nIGxvZ3MgaW5kZXguXG4gKiBJdCBmb2xsb3dzIHRoZSBEYXRhZG9nIGd1aWRlIGF0IGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2xvZ3MvZ3VpZGUvbG9ncy1tb25pdG9ycy1vbi12b2x1bWVzL1xuICogYW5kIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUgbW9uaXRvcnMuXG4gKiAgIDEuIEEgbWV0cmljIGFsZXJ0IHRoYXQgZmlyZXMgd2hlbiB5b3UgcmVhY2ggYSBjZXJ0YWluIHRocmVzaG9sZCBvZiB5b3VyIGRhaWx5IGxvZyBxdW90YS5cbiAqICAgMi4gQW4gYW5vbWFseSBtb25pdG9yIHRoYXQgZGV0ZWN0cyBsb2cgYW1vdW50IHNwaWtlcy5cbiAqICAgMy4gQW4gZXZlbnQgYWxlcnQgdGhhdCBmaXJlcyB3aGVuIHlvdSBoaXQgdGhlIGRhaWx5IGxvZyBxdW90YS5cbiAqXG4gKiBBIGRhdGFkb2cgbG9nIGluZGV4IGlzIHRlYW0gc3BlY2lmaWMgYW5kIHRodXMgdGhlIG1vbml0b3IgbmVlZHMgdG8gYmUgZGVwbG95ZWQganVzdCBvbmNlIHBlciBpbmRleC90ZWFtLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nTG9nSW5kZXhNb25pdG9yaW5nUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IERhdGFkb2dMb2dEYWlseVF1b3RhTW9uaXRvcih0aGlzLCAnRGF0YWRvZ0xvZ0RhaWx5UXVvdGFNb25pdG9yJywgcHJvcHMpO1xuICAgIG5ldyBEYXRhZG9nTG9nc0Fub21hbHlNb25pdG9yKHRoaXMsICdEYXRhZG9nTG9nQWxlcnRBbm9tYWx5TW9uaXRvcicsIHByb3BzKTtcbiAgICBuZXcgRGF0YWRvZ0xvZ0RhaWx5UXVvdGFSZWFjaGVkTW9uaXRvcih0aGlzLCAnRGF0YWRvZ0xvZ0RhaWx5UXVvdGFSZWFjaGVkVjJNb25pdG9yJywgcHJvcHMpO1xuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oe1xuICAgICAgdmFsaWRhdGU6ICgpOiBzdHJpbmdbXSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBpZiAocHJvcHMuZGFpbHlMb2dRdW90YS53YXJuaW5nVGhyZXNob2xkSW5QZXJjZW50IDwgMCB8fCBwcm9wcy5kYWlseUxvZ1F1b3RhLndhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQgPiAxMDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbd2FybmluZ1RocmVzaG9sZEluUGVyY2VudF06IGV4cGVjdGluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwMCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5kYWlseUxvZ1F1b3RhLmFsZXJ0VGhyZXNob2xkSW5QZXJjZW50IDwgMCB8fCBwcm9wcy5kYWlseUxvZ1F1b3RhLmFsZXJ0VGhyZXNob2xkSW5QZXJjZW50ID4gMTAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goJ0ludmFsaWQgW2FsZXJ0VGhyZXNob2xkSW5QZXJjZW50XTogZXhwZWN0aW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmRhaWx5TG9nUXVvdGEuYWxlcnRUaHJlc2hvbGRJblBlcmNlbnQgPCBwcm9wcy5kYWlseUxvZ1F1b3RhLndhcm5pbmdUaHJlc2hvbGRJblBlcmNlbnQpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbYWxlcnRUaHJlc2hvbGRJblBlcmNlbnRdOiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbd2FybmluZ1RocmVzaG9sZEluUGVyY2VudF0nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBEYXRhZG9nTG9nRGFpbHlRdW90YU1vbml0b3IgZXh0ZW5kcyBEYXRhZG9nTW9uaXRvciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nTG9nSW5kZXhNb25pdG9yaW5nUHJvcHMpIHtcbiAgICBjb25zdCBsb2dRdW90YUluRXZlbnRzID0gTWF0aC5mbG9vcihwcm9wcy5kYWlseUxvZ1F1b3RhLnZhbHVlSW5NaWxsaW9uRXZlbnRzICogMV8wMDBfMDAwKTtcbiAgICBjb25zdCB3YXJuaW5nVGhyZXNob2xkID0gTWF0aC5mbG9vcihsb2dRdW90YUluRXZlbnRzICogKHByb3BzLmRhaWx5TG9nUXVvdGEud2FybmluZ1RocmVzaG9sZEluUGVyY2VudCAvIDEwMCkpO1xuICAgIGNvbnN0IGFsZXJ0VGhyZXNob2xkID0gTWF0aC5mbG9vcihsb2dRdW90YUluRXZlbnRzICogKHByb3BzLmRhaWx5TG9nUXVvdGEuYWxlcnRUaHJlc2hvbGRJblBlcmNlbnQgLyAxMDApKTtcblxuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgYWxlcnRUeXBlczogW3Byb3BzLmFsZXJ0VHlwZV0sXG4gICAgICBtb25pdG9yOiB7XG4gICAgICAgIG5hbWU6ICdMb2cgcXVvdGEgYWxtb3N0IHJlYWNoZWQnLFxuICAgICAgICB0eXBlOiAnbWV0cmljIGFsZXJ0JyxcbiAgICAgICAgcXVlcnk6IGBzdW0obGFzdF8xZCk6c3VtOmRhdGFkb2cuZXN0aW1hdGVkX3VzYWdlLmxvZ3MuaW5nZXN0ZWRfZXZlbnRze2RhdGFkb2dfaXNfZXhjbHVkZWQ6ZmFsc2UsZGF0YWRvZ19pbmRleDoke3Byb3BzLmluZGV4TmFtZX19LmFzX2NvdW50KCkgPj0gJHthbGVydFRocmVzaG9sZH1gLFxuICAgICAgICBtZXNzYWdlOiBgW1AzXSBJbnNwZWN0IHlvdXIgbG9nIHZvbHVtZSBhdCAke2RhdGFkb2dMb2dzU2VhcmNoV2l0aEluZGV4RmlsdGVyRGVlcExpbmsoXG4gICAgICAgICAgcHJvcHMuaW5kZXhOYW1lLFxuICAgICAgICApfSBvciBhZGFwdCB0aGUgbG9nIHF1b3RhIGF0ICR7ZGF0YWRvZ0xvZ3NJbmRleGVzQ29uZmlndXJhdGlvbkRlZXBMaW5rfWAsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICB0aHJlc2hvbGRzOiB7XG4gICAgICAgICAgICBjcml0aWNhbDogYWxlcnRUaHJlc2hvbGQsXG4gICAgICAgICAgICB3YXJuaW5nOiB3YXJuaW5nVGhyZXNob2xkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5jbHVkZV90YWdzOiBmYWxzZSxcbiAgICAgICAgICBub3RpZnlfbm9fZGF0YTogIXByb3BzLnNwYXJzZUxvZ2dpbmcsXG4gICAgICAgICAgbm9fZGF0YV90aW1lZnJhbWU6IDI0ICogNjAsIC8vIDEgZGF5XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIERhdGFkb2dMb2dzQW5vbWFseU1vbml0b3IgZXh0ZW5kcyBEYXRhZG9nTW9uaXRvciB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nTG9nSW5kZXhNb25pdG9yaW5nUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIGFsZXJ0VHlwZXM6IFtwcm9wcy5hbGVydFR5cGVdLFxuICAgICAgbW9uaXRvcjoge1xuICAgICAgICBuYW1lOiAnTG9nIGFtb3VudCBpcyByaXNpbmcgdG8gdW5leHBlY3RlZCBsZXZlbHMnLFxuICAgICAgICB0eXBlOiAnbWV0cmljIGFsZXJ0JyxcbiAgICAgICAgcXVlcnk6IGBhdmcobGFzdF80aCk6YW5vbWFsaWVzKHN1bTpkYXRhZG9nLmVzdGltYXRlZF91c2FnZS5sb2dzLmluZ2VzdGVkX2V2ZW50c3tkYXRhZG9nX2lzX2V4Y2x1ZGVkOmZhbHNlLGRhdGFkb2dfaW5kZXg6JHtwcm9wcy5pbmRleE5hbWV9fS5hc19jb3VudCgpLCAncm9idXN0JywgMiwgZGlyZWN0aW9uPSdhYm92ZScsIGFsZXJ0X3dpbmRvdz0nbGFzdF8xNW0nLCBpbnRlcnZhbD02MCwgY291bnRfZGVmYXVsdF96ZXJvPSd0cnVlJywgc2Vhc29uYWxpdHk9J3dlZWtseScsIHRpbWV6b25lPSdldXJvcGUvYmVybGluJykgPj0gMWAsXG4gICAgICAgIG1lc3NhZ2U6IGBbUDRdIExvZ3MgYXJlIGdldHRpbmcgb3V0IG9mIGNvbnRyb2w6ICR7ZGF0YWRvZ0xvZ3NTZWFyY2hXaXRoSW5kZXhGaWx0ZXJEZWVwTGluayhcbiAgICAgICAgICBwcm9wcy5pbmRleE5hbWUsXG4gICAgICAgICl9YCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGluY2x1ZGVfdGFnczogZmFsc2UsXG4gICAgICAgICAgbm90aWZ5X25vX2RhdGE6ICFwcm9wcy5zcGFyc2VMb2dnaW5nLFxuICAgICAgICAgIHRocmVzaG9sZF93aW5kb3dzOiB7XG4gICAgICAgICAgICB0cmlnZ2VyX3dpbmRvdzogJ2xhc3RfMTVtJyxcbiAgICAgICAgICAgIHJlY292ZXJ5X3dpbmRvdzogJ2xhc3RfMTVtJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5jbGFzcyBEYXRhZG9nTG9nRGFpbHlRdW90YVJlYWNoZWRNb25pdG9yIGV4dGVuZHMgRGF0YWRvZ01vbml0b3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGF0YWRvZ0xvZ0luZGV4TW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBhbGVydFR5cGVzOiBbcHJvcHMuYWxlcnRUeXBlXSxcbiAgICAgIG1vbml0b3I6IHtcbiAgICAgICAgbmFtZTogJ0xvZyBxdW90YSByZWFjaGVkJyxcbiAgICAgICAgdHlwZTogJ2V2ZW50LXYyIGFsZXJ0JyxcbiAgICAgICAgcXVlcnk6IGBldmVudHMoXCJzb3VyY2U6ZGF0YWRvZyBkYXRhZG9nX2luZGV4OiR7cHJvcHMuaW5kZXhOYW1lfSBEYWlseSBxdW90YSByZWFjaGVkXCIpLnJvbGx1cChcImNvdW50XCIpLmxhc3QoXCI1bVwiKSA+IDBgLFxuICAgICAgICBtZXNzYWdlOiBgW1AyXSBUaGUgbG9nIHF1b3RlIGZvciB0aGUgaW5kZXggaGFzIGJlZW4gcmVhY2hlZC4gSWYgeW91IGRvIG5vdCBpbmNyZWFzZSB0aGUgcXVvdGEgYXQgJHtkYXRhZG9nTG9nc0luZGV4ZXNDb25maWd1cmF0aW9uRGVlcExpbmt9LCBubyBuZXcgbG9ncyB3aWxsIGJlIGluZGV4ZWQgdW50aWwgdGhlIHF1b3RhIGlzIHJlc2V0IGF0IDI6MDBwbSBVVEMuYCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHRpbWVvdXRfaDogMjQsXG4gICAgICAgICAgdGhyZXNob2xkczoge1xuICAgICAgICAgICAgY3JpdGljYWw6IDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGF0YWRvZ0xvZ3NTZWFyY2hXaXRoSW5kZXhGaWx0ZXJEZWVwTGluayhpbmRleE5hbWU6IHN0cmluZykge1xuICByZXR1cm4gYGh0dHBzOi8vYXBwLmRhdGFkb2docS5ldS9sb2dzP2luZGV4PSR7aW5kZXhOYW1lfWA7XG59XG5cbmNvbnN0IGRhdGFkb2dMb2dzSW5kZXhlc0NvbmZpZ3VyYXRpb25EZWVwTGluayA9ICdodHRwczovL2FwcC5kYXRhZG9naHEuZXUvbG9ncy9waXBlbGluZXMvaW5kZXhlcyc7XG4iXX0=
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -31,4 +31,5 @@ __exportStar(require("./pipeline/rio-bitbucket-source-action"), exports);
|
|
|
31
31
|
__exportStar(require("./pipeline/rio-backup-secrets-restore-stage"), exports);
|
|
32
32
|
__exportStar(require("./kafka"), exports);
|
|
33
33
|
__exportStar(require("./datadog"), exports);
|
|
34
|
-
|
|
34
|
+
__exportStar(require("./contributions/team-transport-two/pipeline"), exports);
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsaURBQStCO0FBQy9CLG9EQUFrQztBQUNsQyxpREFBK0I7QUFDL0IsbURBQWlDO0FBQ2pDLHNEQUFvQztBQUNwQyxvREFBa0M7QUFDbEMseURBQXVDO0FBQ3ZDLGtFQUFnRDtBQUNoRCwrREFBNkM7QUFDN0Msc0RBQW9DO0FBQ3BDLDBEQUF3QztBQUN4QyxpREFBK0I7QUFDL0Isd0RBQXNDO0FBRXRDLHFEQUFtQztBQUNuQyxzREFBb0M7QUFDcEMsb0RBQWtDO0FBRWxDLGdFQUE4QztBQUU5Qyx5RUFBdUQ7QUFDdkQsOEVBQTREO0FBRTVELDBDQUF3QjtBQUV4Qiw0Q0FBMEI7QUFFMUIsOEVBQTREIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9hbGInO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9hc3BlY3QnO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9lY3MnO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9kb2NkYic7XG5leHBvcnQgKiBmcm9tICcuL3dhdGNoZnVsL2R5bmFtb2RiJztcbmV4cG9ydCAqIGZyb20gJy4vd2F0Y2hmdWwvbGFtYmRhJztcbmV4cG9ydCAqIGZyb20gJy4vd2F0Y2hmdWwvdGFyZ2V0Z3JvdXAnO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9kYXRhZG9nLW1ldHJpYy1hbGFybSc7XG5leHBvcnQgKiBmcm9tICcuL3dhdGNoZnVsL2RhdGFkb2ctbG9nLWFsYXJtJztcbmV4cG9ydCAqIGZyb20gJy4vd2F0Y2hmdWwvd2F0Y2hmdWwnO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9tZXRyaWMtYWxhcm0nO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9yZHMnO1xuZXhwb3J0ICogZnJvbSAnLi93YXRjaGZ1bC9jbG91ZGZyb250JztcblxuZXhwb3J0ICogZnJvbSAnLi9yaW8tbGFuZGluZy16b25lJztcbmV4cG9ydCAqIGZyb20gJy4vcmlvLWxvYWQtYmFsYW5jZXInO1xuZXhwb3J0ICogZnJvbSAnLi9yaW8tY2xhaWRvbWV0ZXInO1xuXG5leHBvcnQgKiBmcm9tICcuL2ZhcmdhdGUvcmlvLWZhcmdhdGUtc2VydmljZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUvcmlvLWJpdGJ1Y2tldC1zb3VyY2UtYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUvcmlvLWJhY2t1cC1zZWNyZXRzLXJlc3RvcmUtc3RhZ2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL2thZmthJztcblxuZXhwb3J0ICogZnJvbSAnLi9kYXRhZG9nJztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9waXBlbGluZSc7XG4iXX0=
|
package/lib/watchful/lambda.d.ts
CHANGED
|
@@ -53,6 +53,7 @@ export declare class WatchLambdaFunction extends Construct {
|
|
|
53
53
|
private readonly watchful;
|
|
54
54
|
private readonly fn;
|
|
55
55
|
constructor(scope: Construct, id: string, props: WatchLambdaFunctionProps);
|
|
56
|
+
private createLogErrorMonitor;
|
|
56
57
|
private createErrorsMonitor;
|
|
57
58
|
private createThrottlesMonitor;
|
|
58
59
|
private createDurationMonitor;
|
package/lib/watchful/lambda.js
CHANGED
|
@@ -3,8 +3,10 @@ var _a;
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.WatchLambdaFunction = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
7
|
const cw = require("aws-cdk-lib/aws-cloudwatch");
|
|
7
8
|
const constructs_1 = require("constructs");
|
|
9
|
+
const datadog_log_alarm_1 = require("./datadog-log-alarm");
|
|
8
10
|
const DEFAULT_DURATION_THRESHOLD_PERCENT = 80;
|
|
9
11
|
/**
|
|
10
12
|
* A Construct which creates the following alarms for lambda functions:
|
|
@@ -23,6 +25,21 @@ class WatchLambdaFunction extends constructs_1.Construct {
|
|
|
23
25
|
this.watchful.createAlarm(this, 'Errors', this.createErrorsMonitor(props.errorsPerMinuteThreshold));
|
|
24
26
|
this.watchful.createAlarm(this, 'Throttles', this.createThrottlesMonitor(props.throttlesPerMinuteThreshold));
|
|
25
27
|
this.watchful.createAlarm(this, 'Duration', this.createDurationMonitor(timeoutSec, props.durationThresholdPercent));
|
|
28
|
+
this.watchful.createLogAlarm(this, 'LogErrorMonitor', this.createLogErrorMonitor());
|
|
29
|
+
}
|
|
30
|
+
createLogErrorMonitor() {
|
|
31
|
+
return {
|
|
32
|
+
autoCloseOpsGenieAlerts: true,
|
|
33
|
+
period: aws_cdk_lib_1.Duration.minutes(5),
|
|
34
|
+
unitOfPeriod: datadog_log_alarm_1.UnitOfPeriod.MINUTES,
|
|
35
|
+
periodOperator: datadog_log_alarm_1.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
|
|
36
|
+
statistic: 'count',
|
|
37
|
+
queryFilters: 'error',
|
|
38
|
+
alarmDescription: 'Auto-generated alert for Lambda error logs',
|
|
39
|
+
threshold: 1,
|
|
40
|
+
priority: 3,
|
|
41
|
+
index: '*',
|
|
42
|
+
};
|
|
26
43
|
}
|
|
27
44
|
createErrorsMonitor(errorsPerMinuteThreshold = 0) {
|
|
28
45
|
const fn = this.fn;
|
|
@@ -62,4 +79,4 @@ class WatchLambdaFunction extends constructs_1.Construct {
|
|
|
62
79
|
exports.WatchLambdaFunction = WatchLambdaFunction;
|
|
63
80
|
_a = JSII_RTTI_SYMBOL_1;
|
|
64
81
|
WatchLambdaFunction[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.WatchLambdaFunction", version: "0.0.0" };
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dhdGNoZnVsL2xhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUF1QztBQUN2QyxpREFBaUQ7QUFFakQsMkNBQXVDO0FBQ3ZDLDJEQUFzRjtBQUl0RixNQUFNLGtDQUFrQyxHQUFHLEVBQUUsQ0FBQztBQWdEOUM7Ozs7OztHQU1HO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxzQkFBUztJQUloRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQStCO1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBa0MsQ0FBQztRQUNyRSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBRW5CLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQztRQUM3RyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQzVCLFVBQVUsRUFDVixJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUN2RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQzFCLElBQUksRUFDSixpQkFBaUIsRUFDakIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQzdCLENBQUM7SUFDSixDQUFDO0lBRU8scUJBQXFCO1FBQzNCLE9BQU87WUFDTCx1QkFBdUIsRUFBRSxJQUFJO1lBQzdCLE1BQU0sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDM0IsWUFBWSxFQUFFLGdDQUFZLENBQUMsT0FBTztZQUNsQyxjQUFjLEVBQUUsc0NBQWtCLENBQUMsa0NBQWtDO1lBQ3JFLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFlBQVksRUFBRSxPQUFPO1lBQ3JCLGdCQUFnQixFQUFFLDRDQUE0QztZQUM5RCxTQUFTLEVBQUUsQ0FBQztZQUNaLFFBQVEsRUFBRSxDQUFDO1lBQ1gsS0FBSyxFQUFFLEdBQUc7U0FDWCxDQUFDO0lBQ0osQ0FBQztJQUNPLG1CQUFtQixDQUFDLHdCQUF3QixHQUFHLENBQUM7UUFDdEQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdkMsT0FBTztZQUNMLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLGdCQUFnQixFQUFFLFFBQVEsd0JBQXdCLG9CQUFvQjtZQUN0RSxTQUFTLEVBQUUsd0JBQXdCO1lBQ25DLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0I7WUFDaEUsaUJBQWlCLEVBQUUsQ0FBQztTQUNyQixDQUFDO0lBQ0osQ0FBQztJQUVPLHNCQUFzQixDQUFDLDJCQUEyQixHQUFHLENBQUM7UUFDNUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDN0MsT0FBTztZQUNMLE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLGdCQUFnQixFQUFFLFFBQVEsMkJBQTJCLHVCQUF1QjtZQUM1RSxTQUFTLEVBQUUsMkJBQTJCO1lBQ3RDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0I7WUFDaEUsaUJBQWlCLEVBQUUsQ0FBQztTQUNyQixDQUFDO0lBQ0osQ0FBQztJQUVPLHFCQUFxQixDQUMzQixVQUFrQixFQUNsQiwyQkFBbUMsa0NBQWtDO1FBRXJFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkIsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzNDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLHdCQUF3QixHQUFHLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU87WUFDTCxNQUFNLEVBQUUsY0FBYztZQUN0QixnQkFBZ0IsRUFBRSxrQkFBa0Isb0JBQW9CLE1BQU0sd0JBQXdCLElBQUk7WUFDMUYsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQjtZQUNoRSxTQUFTLEVBQUUsb0JBQW9CLEdBQUcsSUFBSTtZQUN0QyxpQkFBaUIsRUFBRSxDQUFDO1NBQ3JCLENBQUM7SUFDSixDQUFDOztBQTlFSCxrREErRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGN3IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ29tcGFyaXNvbk9wZXJhdG9yLCBMb2dBbGFybVByb3BzLCBVbml0T2ZQZXJpb2QgfSBmcm9tICcuL2RhdGFkb2ctbG9nLWFsYXJtJztcbmltcG9ydCB7IE1ldHJpY0FsYXJtUHJvcHMgfSBmcm9tICcuL21ldHJpYy1hbGFybSc7XG5pbXBvcnQgeyBJV2F0Y2hmdWwgfSBmcm9tICcuL3dhdGNoZnVsJztcblxuY29uc3QgREVGQVVMVF9EVVJBVElPTl9USFJFU0hPTERfUEVSQ0VOVCA9IDgwO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGRlZmluaW5nIGFsYXJtcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXYXRjaExhbWJkYUZ1bmN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgICAqIE51bWJlciBvZiBhbGxvd2VkIGVycm9ycyBwZXIgbWludXRlLiBJZiB0aGVyZSBhcmUgbW9yZSBlcnJvcnMgdGhhbiB0aGF0LCBhbiBhbGFybSB3aWxsIHRyaWdnZXIuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gIHJlYWRvbmx5IGVycm9yc1Blck1pbnV0ZVRocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICAgKiBOdW1iZXIgb2YgYWxsb3dlZCB0aHJvdHRsZXMgcGVyIG1pbnV0ZS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgcmVhZG9ubHkgdGhyb3R0bGVzUGVyTWludXRlVGhyZXNob2xkPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgICAqIFRocmVzaG9sZCBmb3IgdGhlIGR1cmF0aW9uIGFsYXJtIGFzIHBlcmNlbnRhZ2Ugb2YgdGhlIGZ1bmN0aW9uJ3MgdGltZW91dFxuICAgICAqIHZhbHVlLlxuICAgICAqXG4gICAgICogSWYgdGhpcyBpcyBzZXQgdG8gNTAlLCB0aGUgYWxhcm0gd2lsbCBiZSBzZXQgd2hlbiBwOTkgbGF0ZW5jeSBvZiB0aGVcbiAgICAgKiBmdW5jdGlvbiBleGNlZWRzIDUwJSBvZiB0aGUgZnVuY3Rpb24ncyB0aW1lb3V0IHNldHRpbmcuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCA4MFxuICAgICAqL1xuICByZWFkb25seSBkdXJhdGlvblRocmVzaG9sZFBlcmNlbnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgZGVmaW5pbmcgYSBXYXRjaExhbWJkYUZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hMYW1iZGFGdW5jdGlvblByb3BzIGV4dGVuZHMgV2F0Y2hMYW1iZGFGdW5jdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICAgKiBUaGUgcmVmZXJlbmNlIHRvIElXYXRjaGZ1bCBjbGFzcy4gVXNlZCBpbnRlcm5hbGx5LlxuICAgICAqL1xuICByZWFkb25seSB3YXRjaGZ1bDogSVdhdGNoZnVsO1xuXG4gIC8qKlxuICAgICAqIFRoZSBsYW1iZGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgd2F0Y2hlZC5cbiAgICAgKiBbZGlzYWJsZS1hd3NsaW50OnJlZi12aWEtaW50ZXJmYWNlXVxuICAgICAqL1xuICByZWFkb25seSBmbjogbGFtYmRhLkZ1bmN0aW9uO1xufVxuXG4vKipcbiAqIEEgQ29uc3RydWN0IHdoaWNoIGNyZWF0ZXMgdGhlIGZvbGxvd2luZyBhbGFybXMgZm9yIGxhbWJkYSBmdW5jdGlvbnM6XG4gKlxuICogLSBlcnJvcnNcbiAqIC0gdGhyb3R0bGVzXG4gKiAtIGR1cmF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBXYXRjaExhbWJkYUZ1bmN0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSB3YXRjaGZ1bDogSVdhdGNoZnVsO1xuICBwcml2YXRlIHJlYWRvbmx5IGZuOiBsYW1iZGEuRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFdhdGNoTGFtYmRhRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjZm5GdW5jdGlvbiA9IHByb3BzLmZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvbjtcbiAgICBjb25zdCB0aW1lb3V0U2VjID0gY2ZuRnVuY3Rpb24udGltZW91dCB8fCAzO1xuXG4gICAgdGhpcy53YXRjaGZ1bCA9IHByb3BzLndhdGNoZnVsO1xuICAgIHRoaXMuZm4gPSBwcm9wcy5mbjtcblxuICAgIHRoaXMud2F0Y2hmdWwuY3JlYXRlQWxhcm0odGhpcywgJ0Vycm9ycycsIHRoaXMuY3JlYXRlRXJyb3JzTW9uaXRvcihwcm9wcy5lcnJvcnNQZXJNaW51dGVUaHJlc2hvbGQpKTtcbiAgICB0aGlzLndhdGNoZnVsLmNyZWF0ZUFsYXJtKHRoaXMsICdUaHJvdHRsZXMnLCB0aGlzLmNyZWF0ZVRocm90dGxlc01vbml0b3IocHJvcHMudGhyb3R0bGVzUGVyTWludXRlVGhyZXNob2xkKSk7XG4gICAgdGhpcy53YXRjaGZ1bC5jcmVhdGVBbGFybSh0aGlzLFxuICAgICAgJ0R1cmF0aW9uJyxcbiAgICAgIHRoaXMuY3JlYXRlRHVyYXRpb25Nb25pdG9yKHRpbWVvdXRTZWMsIHByb3BzLmR1cmF0aW9uVGhyZXNob2xkUGVyY2VudCksXG4gICAgKTtcbiAgICB0aGlzLndhdGNoZnVsLmNyZWF0ZUxvZ0FsYXJtKFxuICAgICAgdGhpcyxcbiAgICAgICdMb2dFcnJvck1vbml0b3InLFxuICAgICAgdGhpcy5jcmVhdGVMb2dFcnJvck1vbml0b3IoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVMb2dFcnJvck1vbml0b3IoKTogTG9nQWxhcm1Qcm9wcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF1dG9DbG9zZU9wc0dlbmllQWxlcnRzOiB0cnVlLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgdW5pdE9mUGVyaW9kOiBVbml0T2ZQZXJpb2QuTUlOVVRFUywgLy8gdG9EbzogbW92ZSB0aGF0IHNvbWV3aGVyZSBlbHNlIGFuZCBzZXQgZGVmYXVsdHMgdGhlcmU/XG4gICAgICBwZXJpb2RPcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICBzdGF0aXN0aWM6ICdjb3VudCcsXG4gICAgICBxdWVyeUZpbHRlcnM6ICdlcnJvcicsXG4gICAgICBhbGFybURlc2NyaXB0aW9uOiAnQXV0by1nZW5lcmF0ZWQgYWxlcnQgZm9yIExhbWJkYSBlcnJvciBsb2dzJyxcbiAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgIHByaW9yaXR5OiAzLFxuICAgICAgaW5kZXg6ICcqJywgLy8gdG9Ebzogd2Ugc2hvdWxkIHRha2UgaGVyZSB0aGUgdGVhbSBuYW1lIGJ1dCBmb3Igb2xkZXIgc2V0dXBzIHRvIHdvcmsgd2Uga2VlcCB0aGF0IGZvciBjb21wYXRpYmlsaXR5XG4gICAgfTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZUVycm9yc01vbml0b3IoZXJyb3JzUGVyTWludXRlVGhyZXNob2xkID0gMCk6IE1ldHJpY0FsYXJtUHJvcHMge1xuICAgIGNvbnN0IGZuID0gdGhpcy5mbjtcbiAgICBjb25zdCBlcnJvcnNNZXRyaWMgPSBmbi5tZXRyaWNFcnJvcnMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgbWV0cmljOiBlcnJvcnNNZXRyaWMsXG4gICAgICBhbGFybURlc2NyaXB0aW9uOiBgT3ZlciAke2Vycm9yc1Blck1pbnV0ZVRocmVzaG9sZH0gZXJyb3JzIHBlciBtaW51dGVgLFxuICAgICAgdGhyZXNob2xkOiBlcnJvcnNQZXJNaW51dGVUaHJlc2hvbGQsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGN3LkNvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGhyb3R0bGVzTW9uaXRvcih0aHJvdHRsZXNQZXJNaW51dGVUaHJlc2hvbGQgPSAwKTogTWV0cmljQWxhcm1Qcm9wcyB7XG4gICAgY29uc3QgZm4gPSB0aGlzLmZuO1xuICAgIGNvbnN0IHRocm90dGxlc01ldHJpYyA9IGZuLm1ldHJpY1Rocm90dGxlcygpO1xuICAgIHJldHVybiB7XG4gICAgICBtZXRyaWM6IHRocm90dGxlc01ldHJpYyxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBPdmVyICR7dGhyb3R0bGVzUGVyTWludXRlVGhyZXNob2xkfSB0aHJvdHRsZXMgcGVyIG1pbnV0ZWAsXG4gICAgICB0aHJlc2hvbGQ6IHRocm90dGxlc1Blck1pbnV0ZVRocmVzaG9sZCxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY3cuQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEdXJhdGlvbk1vbml0b3IoXG4gICAgdGltZW91dFNlYzogbnVtYmVyLFxuICAgIGR1cmF0aW9uUGVyY2VudFRocmVzaG9sZDogbnVtYmVyID0gREVGQVVMVF9EVVJBVElPTl9USFJFU0hPTERfUEVSQ0VOVCxcbiAgKTogTWV0cmljQWxhcm1Qcm9wcyB7XG4gICAgY29uc3QgZm4gPSB0aGlzLmZuO1xuICAgIGNvbnN0IGR1cmF0aW9uTWV0cmljID0gZm4ubWV0cmljRHVyYXRpb24oKTtcbiAgICBjb25zdCBkdXJhdGlvblRocmVzaG9sZFNlYyA9IE1hdGguZmxvb3IoKGR1cmF0aW9uUGVyY2VudFRocmVzaG9sZCAvIDEwMCkgKiB0aW1lb3V0U2VjKTtcbiAgICByZXR1cm4ge1xuICAgICAgbWV0cmljOiBkdXJhdGlvbk1ldHJpYyxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBwOTkgbGF0ZW5jeSA+PSAke2R1cmF0aW9uVGhyZXNob2xkU2VjfXMgKCR7ZHVyYXRpb25QZXJjZW50VGhyZXNob2xkfSUpYCxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY3cuQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICB0aHJlc2hvbGQ6IGR1cmF0aW9uVGhyZXNob2xkU2VjICogMTAwMCwgLy8gbWlsbGlzZWNvbmRzXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMyxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Documentation, Language } from 'jsii-docgen';
|
|
2
|
+
|
|
3
|
+
const docs = await Documentation.forProject('.');
|
|
4
|
+
|
|
5
|
+
console.info("Step 1")
|
|
6
|
+
const markdown = (await docs.toMarkdown({ language: Language.TYPESCRIPT, })); // returns a markdown string
|
|
7
|
+
console.info("Step 2")
|
|
8
|
+
|
|
9
|
+
const json = (await docs.toJson({ language: Language.TYPESCRIPT })).render(); // returns a JSON object
|
|
10
|
+
|
|
11
|
+
console.log({markdown: markdown.render(), json})
|
package/version.json
CHANGED