UNPKG

@cdklabs/cdk-ecs-codedeploy

Version:

CDK Constructs for performing ECS Deployments with CodeDeploy

80 lines 17.4 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.ApiCanary = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const path = require("path"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch"); const aws_s3_1 = require("aws-cdk-lib/aws-s3"); const aws_s3_assets_1 = require("aws-cdk-lib/aws-s3-assets"); const aws_synthetics_1 = require("aws-cdk-lib/aws-synthetics"); const code_bundling_1 = require("./code-bundling"); /** * A CloudWatch Synthetic Canary for monitoring APIs. */ class ApiCanary extends aws_synthetics_1.Canary { constructor(scope, id, props) { const bundler = new code_bundling_1.CanaryCodeBundler(path.join(__dirname, '..', '..', 'canary-src')); const canaryAsset = new aws_s3_assets_1.Asset(scope, `${id}ApiCanaryAsset`, { path: bundler.codePath, bundling: { image: aws_cdk_lib_1.DockerImage.fromRegistry('node:14'), local: bundler, }, }); let artifactsBucket = props.artifactsBucketLocation?.bucket; if (!artifactsBucket) { artifactsBucket = new aws_s3_1.Bucket(scope, `${id}ArtifactsBucket`, { encryption: aws_s3_1.BucketEncryption.S3_MANAGED, blockPublicAccess: aws_s3_1.BlockPublicAccess.BLOCK_ALL, enforceSSL: true, }); } super(scope, id, { ...props, test: aws_synthetics_1.Test.custom({ code: aws_synthetics_1.Code.fromBucket(canaryAsset.bucket, canaryAsset.s3ObjectKey), handler: 'index.handler', }), runtime: aws_synthetics_1.Runtime.SYNTHETICS_NODEJS_PUPPETEER_6_2, environmentVariables: { baseUrl: props.baseUrl, threadCount: (props.threadCount ?? 20).toString(), testSteps: aws_cdk_lib_1.Lazy.string({ produce: () => JSON.stringify(this._steps) }), }, artifactsBucketLocation: { bucket: artifactsBucket, prefix: props.artifactsBucketLocation?.prefix, }, }); this._steps = props.steps ?? []; const period = aws_cdk_lib_1.Duration.minutes(5); this.successAlarm = new aws_cloudwatch_1.Alarm(this, 'SuccessAlarm', { metric: this.metricSuccessPercent({ period }), evaluationPeriods: 2, threshold: 100, comparisonOperator: aws_cloudwatch_1.ComparisonOperator.LESS_THAN_THRESHOLD, }); if (props.durationAlarmThreshold) { this.durationAlarm = new aws_cloudwatch_1.Alarm(this, 'DurationAlarm', { metric: this.metricDuration({ period }), evaluationPeriods: 2, threshold: props.durationAlarmThreshold.toMilliseconds(), comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD, }); } } /** * Add a new test step to this canary. * * @param step - ApiTestStep to add. */ addTestStep(step) { this._steps.push(step); } } exports.ApiCanary = ApiCanary; _a = JSII_RTTI_SYMBOL_1; ApiCanary[_a] = { fqn: "@cdklabs/cdk-ecs-codedeploy.ApiCanary", version: "0.0.421" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpLWNhbmFyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUE2QjtBQUM3Qiw2Q0FBMEQ7QUFDMUQsK0RBQXVFO0FBR3ZFLCtDQUFpRjtBQUNqRiw2REFBa0Q7QUFDbEQsK0RBQTRHO0FBRTVHLG1EQUFvRDtBQTZLcEQ7O0dBRUc7QUFDSCxNQUFhLFNBQVUsU0FBUSx1QkFBTTtJQWdCbkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFxQjtRQUM3RCxNQUFNLE9BQU8sR0FBRyxJQUFJLGlDQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUN0RixNQUFNLFdBQVcsR0FBRyxJQUFJLHFCQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRTtZQUMxRCxJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVE7WUFDdEIsUUFBUSxFQUFFO2dCQUNSLEtBQUssRUFBRSx5QkFBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7Z0JBQzFDLEtBQUssRUFBRSxPQUFPO2FBQ2Y7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDO1FBQzVELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixlQUFlLEdBQUcsSUFBSSxlQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsRUFBRTtnQkFDMUQsVUFBVSxFQUFFLHlCQUFnQixDQUFDLFVBQVU7Z0JBQ3ZDLGlCQUFpQixFQUFFLDBCQUFpQixDQUFDLFNBQVM7Z0JBQzlDLFVBQVUsRUFBRSxJQUFJO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLElBQUksRUFBRSxxQkFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDaEIsSUFBSSxFQUFFLHFCQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQztnQkFDbEUsT0FBTyxFQUFFLGVBQWU7YUFDekIsQ0FBQztZQUNGLE9BQU8sRUFBRSx3QkFBTyxDQUFDLCtCQUErQjtZQUNoRCxvQkFBb0IsRUFBRTtnQkFDcEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQkFDakQsU0FBUyxFQUFFLGtCQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7YUFDdkU7WUFDRCx1QkFBdUIsRUFBRTtnQkFDdkIsTUFBTSxFQUFFLGVBQWU7Z0JBQ3ZCLE1BQU0sRUFBRSxLQUFLLENBQUMsdUJBQXVCLEVBQUUsTUFBTTthQUM5QztTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFFaEMsTUFBTSxNQUFNLEdBQUcsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHNCQUFLLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUNsRCxNQUFNLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDN0MsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixTQUFTLEVBQUUsR0FBRztZQUNkLGtCQUFrQixFQUFFLG1DQUFrQixDQUFDLG1CQUFtQjtTQUMzRCxDQUFDLENBQUM7UUFFSCxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxzQkFBSyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7Z0JBQ3BELE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ3ZDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3BCLFNBQVMsRUFBRSxLQUFLLENBQUMsc0JBQXNCLENBQUMsY0FBYyxFQUFFO2dCQUN4RCxrQkFBa0IsRUFBRSxtQ0FBa0IsQ0FBQyxzQkFBc0I7YUFDOUQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLElBQWlCO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7O0FBL0VILDhCQWdGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgRG9ja2VySW1hZ2UsIExhenkgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBBbGFybSwgQ29tcGFyaXNvbk9wZXJhdG9yIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0IHsgSVZwYywgU3VibmV0U2VsZWN0aW9uLCBJU2VjdXJpdHlHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEJsb2NrUHVibGljQWNjZXNzLCBCdWNrZXQsIEJ1Y2tldEVuY3J5cHRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IENhbmFyeSwgQXJ0aWZhY3RzQnVja2V0TG9jYXRpb24sIFNjaGVkdWxlLCBUZXN0LCBDb2RlLCBSdW50aW1lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN5bnRoZXRpY3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBDYW5hcnlDb2RlQnVuZGxlciB9IGZyb20gJy4vY29kZS1idW5kbGluZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpVGVzdFN0ZXAge1xuICAvKipcbiAgICogTmFtZSBvZiB0ZXN0LlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIG9mIEhUVFAgcmVxdWVzdCwgcmVsYXRpdmUgdG8gYmFzZVVybC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgbWV0aG9kIHRvIGZvciBIVFRQIHJlcXVlc3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gR0VUXG4gICAqL1xuICByZWFkb25seSBtZXRob2Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGhlYWRlcnMgdG8gaW5jbHVkZSBpbiBIVFRQIHJlcXVlc3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gaGVhZGVycyBpbmNsdWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGhlYWRlcnM/OiB7IFsgbmFtZTogc3RyaW5nIF06IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBib2R5IHRvIGluY2x1ZGUgaW4gSFRUUCByZXF1ZXN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGJvZHkgaW5jbHVkZWQuXG4gICAqL1xuICByZWFkb25seSBib2R5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBKTUVTUGF0aCB0byBhcHBseSBhZ2FpbnN0IHRoZSByZXNwb25zZSBmcm9tIHRoZSBIVFRQIHJlcXVlc3QgYW5kIGNvbXBhcmUgYWdhaW5zdCBleHBlY3RlZCB2YWx1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBKTUVTUGF0aCBhc3NlcnRpb24gd2lsbCBiZSBwZXJmb3JtZWQuXG4gICAqL1xuICByZWFkb25seSBqbWVzUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogRXhwZWN0ZWQgdmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSBqbWVzUGF0aC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4cGVjdGVkVmFsdWU/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpQ2FuYXJ5UHJvcHMgZXh0ZW5kcyBCYXNlQ2FuYXJ5UHJvcHMge1xuICAvKipcbiAgICogVGhlIGJhc2UgVVJMIHRvIHVzZSBmb3IgdGVzdHMuXG4gICAqL1xuICByZWFkb25seSBiYXNlVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aHJlc2hvbGQgZm9yIHRyaWdnZXJpbmcgYW4gYWxhcm0gb24gdGhlIHRlc3QgZHVyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYWxhcm0gaXMgY3JlYXRlZCBmb3IgZHVyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGR1cmF0aW9uQWxhcm1UaHJlc2hvbGQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHJ1biBjb25jdXJyZW50bHkgZm9yIHRoZSBzeW50aGV0aWMgdGVzdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSAyMFxuICAgKi9cbiAgcmVhZG9ubHkgdGhyZWFkQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGVwcyB0byBwZXJmb3JtIGluIHRoZSBzeW50aGV0aWMgdGVzdC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZXBzPzogQXBpVGVzdFN0ZXBbXTtcbn1cblxuaW50ZXJmYWNlIEJhc2VDYW5hcnlQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgczMgbG9jYXRpb24gdGhhdCBzdG9yZXMgdGhlIGRhdGEgb2YgdGhlIGNhbmFyeSBydW5zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEEgbmV3IHMzIGJ1Y2tldCB3aWxsIGJlIGNyZWF0ZWQgd2l0aG91dCBhIHByZWZpeC5cbiAgICovXG4gIHJlYWRvbmx5IGFydGlmYWN0c0J1Y2tldExvY2F0aW9uPzogQXJ0aWZhY3RzQnVja2V0TG9jYXRpb247XG5cbiAgLyoqXG4gICAqIENhbmFyeSBleGVjdXRpb24gcm9sZS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgcm9sZSB0aGF0IHdpbGwgYmUgYXNzdW1lZCBieSB0aGUgY2FuYXJ5IHVwb24gZXhlY3V0aW9uLlxuICAgKiBJdCBjb250cm9scyB0aGUgcGVybWlzc2lvbnMgdGhhdCB0aGUgY2FuYXJ5IHdpbGwgaGF2ZS4gVGhlIHJvbGUgbXVzdFxuICAgKiBiZSBhc3N1bWFibGUgYnkgdGhlIEFXUyBMYW1iZGEgc2VydmljZSBwcmluY2lwYWwuXG4gICAqXG4gICAqIElmIG5vdCBzdXBwbGllZCwgYSByb2xlIHdpbGwgYmUgY3JlYXRlZCB3aXRoIGFsbCB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbnMuXG4gICAqIElmIHlvdSBwcm92aWRlIGEgUm9sZSwgeW91IG11c3QgYWRkIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogQHNlZSByZXF1aXJlZCBwZXJtaXNzaW9uczogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLXN5bnRoZXRpY3MtY2FuYXJ5Lmh0bWwjY2ZuLXN5bnRoZXRpY3MtY2FuYXJ5LWV4ZWN1dGlvbnJvbGVhcm5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBIHVuaXF1ZSByb2xlIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciB0aGlzIGNhbmFyeS5cbiAgICogWW91IGNhbiBhZGQgcGVybWlzc2lvbnMgdG8gcm9sZXMgYnkgY2FsbGluZyAnYWRkVG9Sb2xlUG9saWN5Jy5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBJUm9sZTtcblxuICAvKipcbiAgICogSG93IGxvbmcgdGhlIGNhbmFyeSB3aWxsIGJlIGluIGEgJ1JVTk5JTkcnIHN0YXRlLiBGb3IgZXhhbXBsZSwgaWYgeW91IHNldCBgdGltZVRvTGl2ZWAgdG8gYmUgMSBob3VyIGFuZCBgc2NoZWR1bGVgIHRvIGJlIGByYXRlKDEwIG1pbnV0ZXMpYCxcbiAgICogeW91ciBjYW5hcnkgd2lsbCBydW4gYXQgMTAgbWludXRlIGludGVydmFscyBmb3IgYW4gaG91ciwgZm9yIGEgdG90YWwgb2YgNiB0aW1lcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBsaW1pdFxuICAgKi9cbiAgcmVhZG9ubHkgdGltZVRvTGl2ZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBzY2hlZHVsZSBmb3IgaG93IG9mdGVuIHRoZSBjYW5hcnkgcnVucy4gRm9yIGV4YW1wbGUsIGlmIHlvdSBzZXQgYHNjaGVkdWxlYCB0byBgcmF0ZSgxMCBtaW51dGVzKWAsIHRoZW4gdGhlIGNhbmFyeSB3aWxsIHJ1biBldmVyeSAxMCBtaW51dGVzLlxuICAgKiBZb3UgY2FuIHNldCB0aGUgc2NoZWR1bGUgd2l0aCBgU2NoZWR1bGUucmF0ZShEdXJhdGlvbilgIChyZWNvbW1lbmRlZCkgb3IgeW91IGNhbiBzcGVjaWZ5IGFuIGV4cHJlc3Npb24gdXNpbmcgYFNjaGVkdWxlLmV4cHJlc3Npb24oKWAuXG4gICAqIEBkZWZhdWx0ICdyYXRlKDUgbWludXRlcyknXG4gICAqL1xuICByZWFkb25seSBzY2hlZHVsZT86IFNjaGVkdWxlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY2FuYXJ5IHNob3VsZCBzdGFydCBhZnRlciBjcmVhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnRBZnRlckNyZWF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSG93IG1hbnkgZGF5cyBzaG91bGQgc3VjY2Vzc2Z1bCBydW5zIGJlIHJldGFpbmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5kYXlzKDMxKVxuICAgKi9cbiAgcmVhZG9ubHkgc3VjY2Vzc1JldGVudGlvblBlcmlvZD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBIb3cgbWFueSBkYXlzIHNob3VsZCBmYWlsZWQgcnVucyBiZSByZXRhaW5lZC5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uZGF5cygzMSlcbiAgICovXG4gIHJlYWRvbmx5IGZhaWx1cmVSZXRlbnRpb25QZXJpb2Q/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNhbmFyeS4gQmUgc3VyZSB0byBnaXZlIGl0IGEgZGVzY3JpcHRpdmUgbmFtZSB0aGF0IGRpc3Rpbmd1aXNoZXMgaXQgZnJvbVxuICAgKiBvdGhlciBjYW5hcmllcyBpbiB5b3VyIGFjY291bnQuXG4gICAqXG4gICAqIERvIG5vdCBpbmNsdWRlIHNlY3JldHMgb3IgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24gaW4geW91ciBjYW5hcnkgbmFtZS4gVGhlIGNhbmFyeSBuYW1lXG4gICAqIG1ha2VzIHVwIHBhcnQgb2YgdGhlIGNhbmFyeSBBUk4sIHdoaWNoIGlzIGluY2x1ZGVkIGluIG91dGJvdW5kIGNhbGxzIG92ZXIgdGhlIGludGVybmV0LlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9tb25pdG9yaW5nL3NlcnZpY2VsZW5zX2NhbmFyaWVzX3NlY3VyaXR5Lmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBIHVuaXF1ZSBuYW1lIHdpbGwgYmUgZ2VuZXJhdGVkIGZyb20gdGhlIGNvbnN0cnVjdCBJRFxuICAgKi9cbiAgcmVhZG9ubHkgY2FuYXJ5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFZQQyB3aGVyZSB0aGlzIGNhbmFyeSBpcyBydW4uXG4gICAqXG4gICAqIFNwZWNpZnkgdGhpcyBpZiB0aGUgY2FuYXJ5IG5lZWRzIHRvIGFjY2VzcyByZXNvdXJjZXMgaW4gYSBWUEMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm90IGluIFZQQ1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjPzogSVZwYztcblxuICAvKipcbiAgICogV2hlcmUgdG8gcGxhY2UgdGhlIG5ldHdvcmsgaW50ZXJmYWNlcyB3aXRoaW4gdGhlIFZQQy4gWW91IG11c3QgcHJvdmlkZSBgdnBjYCB3aGVuIHVzaW5nIHRoaXMgcHJvcC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgVnBjIGRlZmF1bHQgc3RyYXRlZ3kgaWYgbm90IHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvbjtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygc2VjdXJpdHkgZ3JvdXBzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBjYW5hcnkncyBuZXR3b3JrIGludGVyZmFjZXMuIFlvdSBtdXN0IHByb3ZpZGUgYHZwY2Agd2hlbiB1c2luZyB0aGlzIHByb3AuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSWYgdGhlIGNhbmFyeSBpcyBwbGFjZWQgd2l0aGluIGEgVlBDIGFuZCBhIHNlY3VyaXR5IGdyb3VwIGlzXG4gICAqIG5vdCBzcGVjaWZpZWQgYSBkZWRpY2F0ZWQgc2VjdXJpdHkgZ3JvdXAgd2lsbCBiZSBjcmVhdGVkIGZvciB0aGlzIGNhbmFyeS5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogSVNlY3VyaXR5R3JvdXBbXTtcbn1cblxuLyoqXG4gKiBBIENsb3VkV2F0Y2ggU3ludGhldGljIENhbmFyeSBmb3IgbW9uaXRvcmluZyBBUElzLlxuICovXG5leHBvcnQgY2xhc3MgQXBpQ2FuYXJ5IGV4dGVuZHMgQ2FuYXJ5IHtcbiAgLyoqXG4gICAqIEEgQ2xvdWRXYXRjaCBBbGFybSB0aGF0IHRyaWdnZXJzIHdoZW4gdGhlIHN1Y2Nlc3MgcmF0ZSBmYWxscyBiZWxvdyAxMDAlIG92ZXIgdGhlIHBhc3QgMiBwZXJpb2RzLlxuICAgKi9cbiAgc3VjY2Vzc0FsYXJtOiBBbGFybTtcblxuICAvKipcbiAgICogQSBDbG91ZFdhdGNoIEFsYXJtIHRoYXQgdHJpZ2dlcnMgd2hlbiB0aGUgZHVyYXRpb24gb2YgdGhlIHRlc3RzIGV4Y2VlZHMgdGhlIGdpdmVuIHRocmVzaG9sZCBvdmVyIHRoZSBwYXN0IDIgcGVyaW9kcy5cbiAgICovXG4gIGR1cmF0aW9uQWxhcm0/OiBBbGFybTtcblxuICAvKipcbiAgICogQGludGVybmFsIGZpZWxkIHRvIHRyYWNrIHN0ZXBzIGZvciB0aGlzIGNhbmFyeS5cbiAgICovXG4gIF9zdGVwczogQXBpVGVzdFN0ZXBbXTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXBpQ2FuYXJ5UHJvcHMpIHtcbiAgICBjb25zdCBidW5kbGVyID0gbmV3IENhbmFyeUNvZGVCdW5kbGVyKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICdjYW5hcnktc3JjJykpO1xuICAgIGNvbnN0IGNhbmFyeUFzc2V0ID0gbmV3IEFzc2V0KHNjb3BlLCBgJHtpZH1BcGlDYW5hcnlBc3NldGAsIHtcbiAgICAgIHBhdGg6IGJ1bmRsZXIuY29kZVBhdGgsXG4gICAgICBidW5kbGluZzoge1xuICAgICAgICBpbWFnZTogRG9ja2VySW1hZ2UuZnJvbVJlZ2lzdHJ5KCdub2RlOjE0JyksXG4gICAgICAgIGxvY2FsOiBidW5kbGVyLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBsZXQgYXJ0aWZhY3RzQnVja2V0ID0gcHJvcHMuYXJ0aWZhY3RzQnVja2V0TG9jYXRpb24/LmJ1Y2tldDtcbiAgICBpZiAoIWFydGlmYWN0c0J1Y2tldCkge1xuICAgICAgYXJ0aWZhY3RzQnVja2V0ID0gbmV3IEJ1Y2tldChzY29wZSwgYCR7aWR9QXJ0aWZhY3RzQnVja2V0YCwge1xuICAgICAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBCbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgdGVzdDogVGVzdC5jdXN0b20oe1xuICAgICAgICBjb2RlOiBDb2RlLmZyb21CdWNrZXQoY2FuYXJ5QXNzZXQuYnVja2V0LCBjYW5hcnlBc3NldC5zM09iamVjdEtleSksXG4gICAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIH0pLFxuICAgICAgcnVudGltZTogUnVudGltZS5TWU5USEVUSUNTX05PREVKU19QVVBQRVRFRVJfNl8yLFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgYmFzZVVybDogcHJvcHMuYmFzZVVybCxcbiAgICAgICAgdGhyZWFkQ291bnQ6IChwcm9wcy50aHJlYWRDb3VudCA/PyAyMCkudG9TdHJpbmcoKSxcbiAgICAgICAgdGVzdFN0ZXBzOiBMYXp5LnN0cmluZyh7IHByb2R1Y2U6ICgpID0+IEpTT04uc3RyaW5naWZ5KHRoaXMuX3N0ZXBzKSB9KSxcbiAgICAgIH0sXG4gICAgICBhcnRpZmFjdHNCdWNrZXRMb2NhdGlvbjoge1xuICAgICAgICBidWNrZXQ6IGFydGlmYWN0c0J1Y2tldCxcbiAgICAgICAgcHJlZml4OiBwcm9wcy5hcnRpZmFjdHNCdWNrZXRMb2NhdGlvbj8ucHJlZml4LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLl9zdGVwcyA9IHByb3BzLnN0ZXBzID8/IFtdO1xuXG4gICAgY29uc3QgcGVyaW9kID0gRHVyYXRpb24ubWludXRlcyg1KTtcblxuICAgIHRoaXMuc3VjY2Vzc0FsYXJtID0gbmV3IEFsYXJtKHRoaXMsICdTdWNjZXNzQWxhcm0nLCB7XG4gICAgICBtZXRyaWM6IHRoaXMubWV0cmljU3VjY2Vzc1BlcmNlbnQoeyBwZXJpb2QgfSksXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMixcbiAgICAgIHRocmVzaG9sZDogMTAwLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IuTEVTU19USEFOX1RIUkVTSE9MRCxcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5kdXJhdGlvbkFsYXJtVGhyZXNob2xkKSB7XG4gICAgICB0aGlzLmR1cmF0aW9uQWxhcm0gPSBuZXcgQWxhcm0odGhpcywgJ0R1cmF0aW9uQWxhcm0nLCB7XG4gICAgICAgIG1ldHJpYzogdGhpcy5tZXRyaWNEdXJhdGlvbih7IHBlcmlvZCB9KSxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDIsXG4gICAgICAgIHRocmVzaG9sZDogcHJvcHMuZHVyYXRpb25BbGFybVRocmVzaG9sZC50b01pbGxpc2Vjb25kcygpLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyB0ZXN0IHN0ZXAgdG8gdGhpcyBjYW5hcnkuXG4gICAqXG4gICAqIEBwYXJhbSBzdGVwIC0gQXBpVGVzdFN0ZXAgdG8gYWRkLlxuICAgKi9cbiAgYWRkVGVzdFN0ZXAoc3RlcDogQXBpVGVzdFN0ZXApIHtcbiAgICB0aGlzLl9zdGVwcy5wdXNoKHN0ZXApO1xuICB9XG59XG4iXX0=