New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

datadog-ecs-cdk

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

datadog-ecs-cdk - npm Package Compare versions

Comparing version 1.1.1 to 1.2.0

ec2.d.ts

56

index.d.ts

@@ -1,54 +0,2 @@

import { Construct } from 'constructs';
import * as ecs from 'aws-cdk-lib/aws-ecs';
import type * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager';
export interface EcsDatadogDaemonServiceProps {
readonly ecsCluster: ecs.Cluster;
readonly datadogApiKeySecret: secretsmanager.ISecret;
readonly datadogSite?: string;
readonly logsDisabled?: boolean;
}
export declare class EcsDatadogDaemonService extends Construct {
constructor(scope: Construct, id: string, props: EcsDatadogDaemonServiceProps);
}
export interface AddDatadogToFargateTaskProps {
datadogApiKeySecret: ecs.Secret;
datadogSite?: string;
agent?: {
enabled?: boolean;
image?: ecs.ContainerImage;
imageTag?: string;
memoryLimitMiB?: number;
cpu?: number;
logToCloudWatch?: boolean;
apm?: {
enabled?: boolean;
port?: number;
applicationEnvVars?: {
doNotSet?: boolean;
apmHostEnvVarName?: string;
apmPortEnvVarName?: string;
apmTraceEnabledEnvVarName?: string;
};
};
statsd?: {
enabled?: boolean;
port?: number;
applicationEnvVars?: {
doNotSet?: boolean;
statsdHostEnvVarName?: string;
statsdPortEnvVarName?: string;
};
};
};
fireLensLogging?: {
enabled?: boolean;
service?: string;
source?: string;
tags?: Record<string, string>;
memoryLimitMiB?: number;
cpu?: number;
image?: ecs.ContainerImage;
imageTag?: string;
};
}
export declare const addDatadogToFargateTask: (task: ecs.TaskDefinition, props: AddDatadogToFargateTaskProps) => void;
export * from './ec2';
export * from './fargate';
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.addDatadogToFargateTask = exports.EcsDatadogDaemonService = void 0;
const constructs_1 = require("constructs");
const cdk = require("aws-cdk-lib");
const ecs = require("aws-cdk-lib/aws-ecs");
class EcsDatadogDaemonService extends constructs_1.Construct {
constructor(scope, id, props) {
var _a;
super(scope, id);
// To match as documented at
// https://docs.datadoghq.com/containers/amazon_ecs/?tab=awscli#setup
// and
// https://docs.datadoghq.com/containers/amazon_ecs/logs/?tab=linux
const taskDefinition = new ecs.Ec2TaskDefinition(this, 'TaskDefinition', {
family: 'datadog-agent-task',
});
const container = taskDefinition.addContainer('datadog-agent', {
image: ecs.ContainerImage.fromRegistry('public.ecr.aws/datadog/agent:latest'),
cpu: 100,
memoryLimitMiB: 512,
essential: true,
environment: {
DD_SITE: (_a = props.datadogSite) !== null && _a !== void 0 ? _a : 'datadoghq.com',
...(props.logsDisabled
? {}
: {
DD_LOGS_ENABLED: 'true',
DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL: 'true',
}),
},
secrets: {
DD_API_KEY: ecs.Secret.fromSecretsManager(props.datadogApiKeySecret),
},
healthCheck: {
command: ['CMD-SHELL', 'agent health'],
retries: 3,
timeout: cdk.Duration.seconds(5),
interval: cdk.Duration.seconds(10),
startPeriod: cdk.Duration.seconds(15),
},
logging: ecs.LogDrivers.awsLogs({
streamPrefix: 'datadog-agent',
}),
});
container.addMountPoints({
containerPath: '/var/run/docker.sock',
sourceVolume: 'docker_sock',
readOnly: true,
}, {
containerPath: '/host/sys/fs/cgroup',
sourceVolume: 'cgroup',
readOnly: true,
}, {
containerPath: '/host/proc',
sourceVolume: 'proc',
readOnly: true,
});
if (!props.logsDisabled) {
container.addMountPoints({
containerPath: '/opt/datadog-agent/run',
sourceVolume: 'pointdir',
readOnly: false,
}, {
containerPath: '/var/lib/docker/containers',
sourceVolume: 'containers_root',
readOnly: true,
});
}
taskDefinition.addVolume({
name: 'docker_sock',
host: {
sourcePath: '/var/run/docker.sock',
},
});
taskDefinition.addVolume({
name: 'proc',
host: {
sourcePath: '/proc/',
},
});
taskDefinition.addVolume({
name: 'cgroup',
host: {
sourcePath: '/sys/fs/cgroup/',
},
});
if (!props.logsDisabled) {
taskDefinition.addVolume({
name: 'pointdir',
host: {
sourcePath: '/opt/datadog-agent/run',
},
});
taskDefinition.addVolume({
name: 'containers_root',
host: {
sourcePath: '/var/lib/docker/containers',
},
});
}
new ecs.Ec2Service(this, 'Service', {
cluster: props.ecsCluster,
taskDefinition,
daemon: true,
});
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
}
exports.EcsDatadogDaemonService = EcsDatadogDaemonService;
const formatTags = (tags) => {
const formattedTags = [];
for (const [key, value] of Object.entries(tags)) {
formattedTags.push(`${key}:${value}`);
}
return formattedTags.join(',');
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
const addDatadogToFargateTask = (task, props) => {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45;
const containerNames = [];
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
const containers = task.containers;
for (const container of containers) {
containerNames.push(container.containerName);
}
if ((_a = props.agent) === null || _a === void 0 ? void 0 : _a.enabled) {
task.addContainer('datadog-agent', {
image: (_c = (_b = props.agent) === null || _b === void 0 ? void 0 : _b.image) !== null && _c !== void 0 ? _c : ecs.ContainerImage.fromRegistry(`public.ecr.aws/datadog/agent:${(_e = (_d = props.agent) === null || _d === void 0 ? void 0 : _d.imageTag) !== null && _e !== void 0 ? _e : 'latest'}`),
memoryLimitMiB: (_g = (_f = props.agent) === null || _f === void 0 ? void 0 : _f.memoryLimitMiB) !== null && _g !== void 0 ? _g : 256,
...(((_h = props.agent) === null || _h === void 0 ? void 0 : _h.cpu)
? {
cpu: (_j = props.fireLensLogging) === null || _j === void 0 ? void 0 : _j.cpu,
}
: {}),
...(((_k = props.agent) === null || _k === void 0 ? void 0 : _k.logToCloudWatch)
? {
logging: ecs.LogDrivers.awsLogs({
streamPrefix: 'datadog-agent',
}),
}
: {}),
environment: {
ECS_FARGATE: 'true',
DD_SITE: (_l = props.datadogSite) !== null && _l !== void 0 ? _l : 'datadoghq.com',
...(((_o = (_m = props.agent) === null || _m === void 0 ? void 0 : _m.apm) === null || _o === void 0 ? void 0 : _o.enabled)
? {
DD_APM_ENABLED: 'true',
DD_APM_RECEIVER_PORT: String((_r = (_q = (_p = props.agent) === null || _p === void 0 ? void 0 : _p.apm) === null || _q === void 0 ? void 0 : _q.port) !== null && _r !== void 0 ? _r : '8126'),
}
: {
DD_APM_ENABLED: 'false',
}),
...(((_t = (_s = props.agent) === null || _s === void 0 ? void 0 : _s.statsd) === null || _t === void 0 ? void 0 : _t.enabled)
? {
DD_USE_DOGSTATSD: 'true',
DD_DOGSTATSD_PORT: String((_w = (_v = (_u = props.agent) === null || _u === void 0 ? void 0 : _u.statsd) === null || _v === void 0 ? void 0 : _v.port) !== null && _w !== void 0 ? _w : '8125'),
}
: {
DD_USE_DOGSTATSD: 'false',
}),
},
secrets: {
DD_API_KEY: props.datadogApiKeySecret,
},
});
if (((_y = (_x = props.agent) === null || _x === void 0 ? void 0 : _x.apm) === null || _y === void 0 ? void 0 : _y.enabled) && ((_1 = (_0 = (_z = props.agent) === null || _z === void 0 ? void 0 : _z.apm) === null || _0 === void 0 ? void 0 : _0.applicationEnvVars) === null || _1 === void 0 ? void 0 : _1.doNotSet) !== true) {
for (const containerName of containerNames) {
const container = task.findContainer(containerName);
if (container) {
container.addEnvironment((_4 = (_3 = (_2 = props.agent) === null || _2 === void 0 ? void 0 : _2.apm.applicationEnvVars) === null || _3 === void 0 ? void 0 : _3.apmTraceEnabledEnvVarName) !== null && _4 !== void 0 ? _4 : 'DD_TRACE_ENABLED', 'true');
container.addEnvironment((_7 = (_6 = (_5 = props.agent) === null || _5 === void 0 ? void 0 : _5.apm.applicationEnvVars) === null || _6 === void 0 ? void 0 : _6.apmHostEnvVarName) !== null && _7 !== void 0 ? _7 : 'DD_AGENT_HOST', 'localhost');
container.addEnvironment((_10 = (_9 = (_8 = props.agent) === null || _8 === void 0 ? void 0 : _8.apm.applicationEnvVars) === null || _9 === void 0 ? void 0 : _9.apmPortEnvVarName) !== null && _10 !== void 0 ? _10 : 'DD_TRACE_AGENT_PORT', String((_13 = (_12 = (_11 = props.agent) === null || _11 === void 0 ? void 0 : _11.apm) === null || _12 === void 0 ? void 0 : _12.port) !== null && _13 !== void 0 ? _13 : '8126'));
}
}
}
if (((_15 = (_14 = props.agent) === null || _14 === void 0 ? void 0 : _14.statsd) === null || _15 === void 0 ? void 0 : _15.enabled) && ((_18 = (_17 = (_16 = props.agent) === null || _16 === void 0 ? void 0 : _16.statsd) === null || _17 === void 0 ? void 0 : _17.applicationEnvVars) === null || _18 === void 0 ? void 0 : _18.doNotSet) !== true) {
for (const containerName of containerNames) {
const container = task.findContainer(containerName);
if (container) {
container.addEnvironment((_22 = (_21 = (_20 = (_19 = props.agent) === null || _19 === void 0 ? void 0 : _19.statsd) === null || _20 === void 0 ? void 0 : _20.applicationEnvVars) === null || _21 === void 0 ? void 0 : _21.statsdHostEnvVarName) !== null && _22 !== void 0 ? _22 : 'STATSD_HOST', 'localhost');
container.addEnvironment((_26 = (_25 = (_24 = (_23 = props.agent) === null || _23 === void 0 ? void 0 : _23.statsd) === null || _24 === void 0 ? void 0 : _24.applicationEnvVars) === null || _25 === void 0 ? void 0 : _25.statsdPortEnvVarName) !== null && _26 !== void 0 ? _26 : 'STATSD_PORT', String((_29 = (_28 = (_27 = props.agent) === null || _27 === void 0 ? void 0 : _27.statsd) === null || _28 === void 0 ? void 0 : _28.port) !== null && _29 !== void 0 ? _29 : '8125'));
}
}
}
}
if ((_30 = props.fireLensLogging) === null || _30 === void 0 ? void 0 : _30.enabled) {
task.addFirelensLogRouter('log_router', {
image: (_32 = (_31 = props.fireLensLogging) === null || _31 === void 0 ? void 0 : _31.image) !== null && _32 !== void 0 ? _32 : ecs.ContainerImage.fromRegistry(`public.ecr.aws/datadog/aws-for-fluent-bit:${(_34 = (_33 = props.fireLensLogging) === null || _33 === void 0 ? void 0 : _33.imageTag) !== null && _34 !== void 0 ? _34 : 'latest'}`),
memoryLimitMiB: (_36 = (_35 = props.fireLensLogging) === null || _35 === void 0 ? void 0 : _35.memoryLimitMiB) !== null && _36 !== void 0 ? _36 : 256,
...(((_37 = props.fireLensLogging) === null || _37 === void 0 ? void 0 : _37.cpu)
? {
cpu: (_38 = props.fireLensLogging) === null || _38 === void 0 ? void 0 : _38.cpu,
}
: {}),
firelensConfig: {
type: ecs.FirelensLogRouterType.FLUENTBIT,
options: {
enableECSLogMetadata: true,
},
},
});
const firelensLogDriver = ecs.LogDrivers.firelens({
options: {
Name: 'datadog',
Host: `http-intake.logs.${(_39 = props.datadogSite) !== null && _39 !== void 0 ? _39 : 'datadoghq.com'}`,
TLS: 'on',
provider: 'ecs',
dd_message_key: 'log',
...(((_40 = props.fireLensLogging) === null || _40 === void 0 ? void 0 : _40.service)
? {
dd_service: (_41 = props.fireLensLogging) === null || _41 === void 0 ? void 0 : _41.service,
}
: {}),
...(((_42 = props.fireLensLogging) === null || _42 === void 0 ? void 0 : _42.source)
? {
dd_source: (_43 = props.fireLensLogging) === null || _43 === void 0 ? void 0 : _43.source,
}
: {}),
...(((_44 = props.fireLensLogging) === null || _44 === void 0 ? void 0 : _44.tags)
? {
dd_tags: formatTags((_45 = props.fireLensLogging) === null || _45 === void 0 ? void 0 : _45.tags),
}
: {}),
},
secretOptions: {
apikey: props.datadogApiKeySecret,
},
});
for (const containerName of containerNames) {
const container = task.findContainer(containerName);
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
container.logDriverConfig = firelensLogDriver.bind(container, container);
}
}
};
exports.addDatadogToFargateTask = addDatadogToFargateTask;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFFdkMsbUNBQW1DO0FBQ25DLDJDQUEyQztBQVUzQyxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBQ2xELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBbUM7O1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsNEJBQTRCO1FBQzVCLHFFQUFxRTtRQUNyRSxNQUFNO1FBQ04sbUVBQW1FO1FBQ25FLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUNyRSxNQUFNLEVBQUUsb0JBQW9CO1NBQy9CLENBQUMsQ0FBQztRQUVILE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFO1lBQzNELEtBQUssRUFBRSxHQUFHLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxxQ0FBcUMsQ0FBQztZQUM3RSxHQUFHLEVBQUUsR0FBRztZQUNSLGNBQWMsRUFBRSxHQUFHO1lBQ25CLFNBQVMsRUFBRSxJQUFJO1lBQ2YsV0FBVyxFQUFFO2dCQUNULE9BQU8sRUFBRSxNQUFBLEtBQUssQ0FBQyxXQUFXLG1DQUFJLGVBQWU7Z0JBQzdDLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWTtvQkFDbEIsQ0FBQyxDQUFDLEVBQUU7b0JBQ0osQ0FBQyxDQUFDO3dCQUNJLGVBQWUsRUFBRSxNQUFNO3dCQUN2QixvQ0FBb0MsRUFBRSxNQUFNO3FCQUMvQyxDQUFDO2FBQ1g7WUFDRCxPQUFPLEVBQUU7Z0JBQ0wsVUFBVSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDO2FBQ3ZFO1lBQ0QsV0FBVyxFQUFFO2dCQUNULE9BQU8sRUFBRSxDQUFDLFdBQVcs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QUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzdFLENBQUM7SUFDTCxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBNUhXLFFBQUEsdUJBQXVCLDJCQTRIbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGVjcyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNzJztcbmltcG9ydCB0eXBlICogYXMgc2VjcmV0c21hbmFnZXIgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcblxuZXhwb3J0IGludGVyZmFjZSBFY3NEYXRhZG9nRGFlbW9uU2VydmljZVByb3BzIHtcbiAgICByZWFkb25seSBlY3NDbHVzdGVyOiBlY3MuQ2x1c3RlcjtcbiAgICByZWFkb25seSBkYXRhZG9nQXBpS2V5U2VjcmV0OiBzZWNyZXRzbWFuYWdlci5JU2VjcmV0O1xuICAgIHJlYWRvbmx5IGRhdGFkb2dTaXRlPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGxvZ3NEaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBFY3NEYXRhZG9nRGFlbW9uU2VydmljZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEVjc0RhdGFkb2dEYWVtb25TZXJ2aWNlUHJvcHMpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgICAgICAvLyBUbyBtYXRjaCBhcyBkb2N1bWVudGVkIGF0XG4gICAgICAgIC8vIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2NvbnRhaW5lcnMvYW1hem9uX2Vjcy8/dGFiPWF3c2NsaSNzZXR1cFxuICAgICAgICAvLyBhbmRcbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmRhdGFkb2docS5jb20vY29udGFpbmVycy9hbWF6b25fZWNzL2xvZ3MvP3RhYj1saW51eFxuICAgICAgICBjb25zdCB0YXNrRGVmaW5pdGlvbiA9IG5ldyBlY3MuRWMyVGFza0RlZmluaXRpb24odGhpcywgJ1Rhc2tEZWZpbml0aW9uJywge1xuICAgICAgICAgICAgZmFtaWx5OiAnZGF0YWRvZy1hZ2VudC10YXNrJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGFza0RlZmluaXRpb24uYWRkQ29udGFpbmVyKCdkYXRhZG9nLWFnZW50Jywge1xuICAgICAgICAgICAgaW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZS5mcm9tUmVnaXN0cnkoJ3B1YmxpYy5lY3IuYXdzL2RhdGFkb2cvYWdlbnQ6bGF0ZXN0JyksXG4gICAgICAgICAgICBjcHU6IDEwMCxcbiAgICAgICAgICAgIG1lbW9yeUxpbWl0TWlCOiA1MTIsXG4gICAgICAgICAgICBlc3NlbnRpYWw6IHRydWUsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgICAgIEREX1NJVEU6IHByb3BzLmRhdGFkb2dTaXRlID8/ICdkYXRhZG9naHEuY29tJyxcbiAgICAgICAgICAgICAgICAuLi4ocHJvcHMubG9nc0Rpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgID8ge31cbiAgICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEREX0xPR1NfRU5BQkxFRDogJ3RydWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBERF9MT0dTX0NPTkZJR19DT05UQUlORVJfQ09MTEVDVF9BTEw6ICd0cnVlJyxcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWNyZXRzOiB7XG4gICAgICAgICAgICAgICAgRERfQVBJX0tFWTogZWNzLlNlY3JldC5mcm9tU2VjcmV0c01hbmFnZXIocHJvcHMuZGF0YWRvZ0FwaUtleVNlY3JldCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhbHRoQ2hlY2s6IHtcbiAgICAgICAgICAgICAgICBjb21tYW5kOiBbJ0NNRC1TSEVMTCcsICdhZ2VudCBoZWFsdGgnXSxcbiAgICAgICAgICAgICAgICByZXRyaWVzOiAzLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgICAgICAgICAgICAgIGludGVydmFsOiBjZGsuRHVyYXRpb24uc2Vjb25kcygxMCksXG4gICAgICAgICAgICAgICAgc3RhcnRQZXJpb2Q6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDE1KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2dnaW5nOiBlY3MuTG9nRHJpdmVycy5hd3NMb2dzKHtcbiAgICAgICAgICAgICAgICBzdHJlYW1QcmVmaXg6ICdkYXRhZG9nLWFnZW50JyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb250YWluZXIuYWRkTW91bnRQb2ludHMoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyUGF0aDogJy92YXIvcnVuL2RvY2tlci5zb2NrJyxcbiAgICAgICAgICAgICAgICBzb3VyY2VWb2x1bWU6ICdkb2NrZXJfc29jaycsXG4gICAgICAgICAgICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lclBhdGg6ICcvaG9zdC9zeXMvZnMvY2dyb3VwJyxcbiAgICAgICAgICAgICAgICBzb3VyY2VWb2x1bWU6ICdjZ3JvdXAnLFxuICAgICAgICAgICAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXJQYXRoOiAnL2hvc3QvcHJvYycsXG4gICAgICAgICAgICAgICAgc291cmNlVm9sdW1lOiAncHJvYycsXG4gICAgICAgICAgICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghcHJvcHMubG9nc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICBjb250YWluZXIuYWRkTW91bnRQb2ludHMoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJQYXRoOiAnL29wdC9kYXRhZG9nLWFnZW50L3J1bicsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVZvbHVtZTogJ3BvaW50ZGlyJyxcbiAgICAgICAgICAgICAgICAgICAgcmVhZE9ubHk6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJQYXRoOiAnL3Zhci9saWIvZG9ja2VyL2NvbnRhaW5lcnMnLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VWb2x1bWU6ICdjb250YWluZXJzX3Jvb3QnLFxuICAgICAgICAgICAgICAgICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhc2tEZWZpbml0aW9uLmFkZFZvbHVtZSh7XG4gICAgICAgICAgICBuYW1lOiAnZG9ja2VyX3NvY2snLFxuICAgICAgICAgICAgaG9zdDoge1xuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6ICcvdmFyL3J1bi9kb2NrZXIuc29jaycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB0YXNrRGVmaW5pdGlvbi5hZGRWb2x1bWUoe1xuICAgICAgICAgICAgbmFtZTogJ3Byb2MnLFxuICAgICAgICAgICAgaG9zdDoge1xuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6ICcvcHJvYy8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGFza0RlZmluaXRpb24uYWRkVm9sdW1lKHtcbiAgICAgICAgICAgIG5hbWU6ICdjZ3JvdXAnLFxuICAgICAgICAgICAgaG9zdDoge1xuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6ICcvc3lzL2ZzL2Nncm91cC8nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFwcm9wcy5sb2dzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRhc2tEZWZpbml0aW9uLmFkZFZvbHVtZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3BvaW50ZGlyJyxcbiAgICAgICAgICAgICAgICBob3N0OiB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6ICcvb3B0L2RhdGFkb2ctYWdlbnQvcnVuJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRhc2tEZWZpbml0aW9uLmFkZFZvbHVtZSh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NvbnRhaW5lcnNfcm9vdCcsXG4gICAgICAgICAgICAgICAgaG9zdDoge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VQYXRoOiAnL3Zhci9saWIvZG9ja2VyL2NvbnRhaW5lcnMnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ldyBlY3MuRWMyU2VydmljZSh0aGlzLCAnU2VydmljZScsIHtcbiAgICAgICAgICAgIGNsdXN0ZXI6IHByb3BzLmVjc0NsdXN0ZXIsXG4gICAgICAgICAgICB0YXNrRGVmaW5pdGlvbixcbiAgICAgICAgICAgIGRhZW1vbjogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZERhdGFkb2dUb0ZhcmdhdGVUYXNrUHJvcHMge1xuICAgIC8vIE5vdGU6IGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhpcyBzZWNyZXRcbiAgICAvLyBkb2Vzbid0IGhhdmUgYSBuZXdsaW5lIGF0IHRoZSBlbmQuIE90aGVyd2lzZSwgdGhlIGZpcmVsZW5zXG4gICAgLy8gbG9nZ2luZyBjb25maWd1cmF0aW9uIHdpbGwgZmFpbCB0byBzZW5kIGxvZ3MgdG8gRGF0YWRvZy4gVGhpc1xuICAgIC8vIGlzIGFuIGVhc3kgbWlzdGFrZSB0byBpbnRyb2R1Y2Ugd2hlbiB0aGUgc291cmNlIGZvciB0aGUgc2VjcmV0XG4gICAgLy8gaXMgYSBzZWNyZXRzbWFuYWdlciBTZWNyZXQgY29udGFpbmluZyBhIHNpbmdsZSB2YWx1ZSwgcmF0aGVyXG4gICAgLy8gdGhhbiBrZXktdmFsdWUgcGFpcnMuXG4gICAgZGF0YWRvZ0FwaUtleVNlY3JldDogZWNzLlNlY3JldDtcbiAgICAvLyBEZWZhdWx0cyB0byBkYXRhZG9naHEuY29tXG4gICAgZGF0YWRvZ1NpdGU/OiBzdHJpbmc7XG4gICAgYWdlbnQ/OiB7XG4gICAgICAgIC8vIERlZmF1bHRzIHRvIGZhbHNlXG4gICAgICAgIGVuYWJsZWQ/OiBib29sZWFuO1xuICAgICAgICAvLyBEZWZhdWx0cyB0byBwdWJsaWMuZWNyLmF3cy9kYXRhZG9nL2FnZW50OmxhdGVzdFxuICAgICAgICBpbWFnZT86IGVjcy5Db250YWluZXJJbWFnZTtcbiAgICAgICAgLy8gRGVmYXVsdHMgdG8gbGF0ZXN0XG4gICAgICAgIGltYWdlVGFnPzogc3RyaW5nO1xuICAgICAgICAvLyBEZWZhdWx0cyB0byAyNTZcbiAgICAgICAgbWVtb3J5TGltaXRNaUI/OiBudW1iZXI7XG4gICAgICAgIC8vIERlZmF1bHRzIHRvIHVuc2V0XG4gICAgICAgIGNwdT86IG51bWJlcjtcbiAgICAgICAgLy8gRGVmYXVsdHMgdG8gZmFsc2VcbiAgICAgICAgbG9nVG9DbG91ZFdhdGNoPzogYm9vbGVhbjtcbiAgICAgICAgYXBtPzoge1xuICAgICAgICAgICAgLy8gRGVmYXVsdHMgdG8gZmFsc2VcbiAgICAgICAgICAgIGVuYWJsZWQ/OiBib29sZWFuO1xuICAgICAgICAgICAgLy8gRGVmYXVsdHMgdG8gODEyNlxuICAgICAgICAgICAgcG9ydD86IG51bWJlcjtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uRW52VmFycz86IHtcbiAgICAgICAgICAgICAgICAvLyBEZWZhdWx0cyB0byBmYWxzZVxuICAgICAgICAgICAgICAgIGRvTm90U2V0PzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAvLyBEZWZhdWx0cyB0byBERF9BR0VOVF9IT1NUXG4gICAgICAgICAgICAgICAgYXBtSG9zdEVudlZhck5hbWU/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgLy8gRGVmYXVsdHMgdG8gRERfVFJBQ0VfQUdFTlRfUE9SVFxuICAgICAgICAgICAgICAgIGFwbVBvcnRFbnZWYXJOYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgIC8vIERlZmF1bHRzIHRvIEREX1RSQUNFX0VOQUJMRURcbiAgICAgICAgICAgICAgICBhcG1UcmFjZUVuYWJsZWRFbnZWYXJOYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgc3RhdHNkPzoge1xuICAgICAgICAgICAgLy8gRGVmYXVsdHMgdG8gZmFsc2VcbiAgICAgICAgICAgIGVuYWJsZWQ/OiBib29sZWFuO1xuICAgICAgICAgICAgLy8gRGVmYXVsdHMgdG8gODEyNVxuICAgICAgICAgICAgcG9ydD86IG51bWJlcjtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uRW52VmFycz86IHtcbiAgICAgICAgICAgICAgICAvLyBEZWZhdWx0cyB0byBmYWxzZVxuICAgICAgICAgICAgICAgIGRvTm90U2V0PzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAvLyBEZWZhdWx0cyB0byBTVEFUU0RfSE9TVFxuICAgICAgICAgICAgICAgIHN0YXRzZEhvc3RFbnZWYXJOYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgIC8vIERlZmF1bHRzIHRvIFNUQVRTRF9QT1JUXG4gICAgICAgICAgICAgICAgc3RhdHNkUG9ydEVudlZhck5hbWU/OiBzdHJpbmc7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH07XG4gICAgZmlyZUxlbnNMb2dnaW5nPzoge1xuICAgICAgICAvLyBEZWZhdWx0cyB0byBmYWxzZVxuICAgICAgICBlbmFibGVkPzogYm9vbGVhbjtcbiAgICAgICAgLy8gRGVmYXVsdHMgdG8gdW5zZXRcbiAgICAgICAgc2VydmljZT86IHN0cmluZztcbiAgICAgICAgLy8gRGVmYXVsdHMgdG8gdW5zZXRcbiAgICAgICAgc291cmNlPzogc3RyaW5nO1xuICAgICAgICAvLyBEZWZhdWx0cyB0byB1bnNldFxuICAgICAgICB0YWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgICAgLy8gRGVmYXVsdHMgdG8gMjU2XG4gICAgICAgIG1lbW9yeUxpbWl0TWlCPzogbnVtYmVyO1xuICAgICAgICAvLyBEZWZhdWx0cyB0byB1bnNldFxuICAgICAgICBjcHU/OiBudW1iZXI7XG4gICAgICAgIC8vIERlZmF1bHRzIHRvIHB1YmxpYy5lY3IuYXdzL2RhdGFkb2cvYXdzLWZvci1mbHVlbnQtYml0OmxhdGVzdFxuICAgICAgICBpbWFnZT86IGVjcy5Db250YWluZXJJbWFnZTtcbiAgICAgICAgLy8gRGVmYXVsdHMgdG8gbGF0ZXN0XG4gICAgICAgIGltYWdlVGFnPzogc3RyaW5nO1xuICAgIH07XG59XG5cbmNvbnN0IGZvcm1hdFRhZ3MgPSAodGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgZm9ybWF0dGVkVGFncyA9IFtdO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRhZ3MpKSB7XG4gICAgICAgIGZvcm1hdHRlZFRhZ3MucHVzaChgJHtrZXl9OiR7dmFsdWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXR0ZWRUYWdzLmpvaW4oJywnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGREYXRhZG9nVG9GYXJnYXRlVGFzayA9ICh0YXNrOiBlY3MuVGFza0RlZmluaXRpb24sIHByb3BzOiBBZGREYXRhZG9nVG9GYXJnYXRlVGFza1Byb3BzKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyTmFtZXMgPSBbXTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGNvbnRhaW5lcnMgPSB0YXNrLmNvbnRhaW5lcnM7XG4gICAgZm9yIChjb25zdCBjb250YWluZXIgb2YgY29udGFpbmVycykge1xuICAgICAgICBjb250YWluZXJOYW1lcy5wdXNoKGNvbnRhaW5lci5jb250YWluZXJOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuYWdlbnQ/LmVuYWJsZWQpIHtcbiAgICAgICAgdGFzay5hZGRDb250YWluZXIoJ2RhdGFkb2ctYWdlbnQnLCB7XG4gICAgICAgICAgICBpbWFnZTogcHJvcHMuYWdlbnQ/LmltYWdlID8/IGVjcy5Db250YWluZXJJbWFnZS5mcm9tUmVnaXN0cnkoYHB1YmxpYy5lY3IuYXdzL2RhdGFkb2cvYWdlbnQ6JHtwcm9wcy5hZ2VudD8uaW1hZ2VUYWcgPz8gJ2xhdGVzdCd9YCksXG4gICAgICAgICAgICBtZW1vcnlMaW1pdE1pQjogcHJvcHMuYWdlbnQ/Lm1lbW9yeUxpbWl0TWlCID8/IDI1NixcbiAgICAgICAgICAgIC4uLihwcm9wcy5hZ2VudD8uY3B1XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgY3B1OiBwcm9wcy5maXJlTGVuc0xvZ2dpbmc/LmNwdSxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgIC4uLihwcm9wcy5hZ2VudD8ubG9nVG9DbG91ZFdhdGNoXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgbG9nZ2luZzogZWNzLkxvZ0RyaXZlcnMuYXdzTG9ncyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVByZWZpeDogJ2RhdGFkb2ctYWdlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgICAgICBFQ1NfRkFSR0FURTogJ3RydWUnLFxuICAgICAgICAgICAgICAgIEREX1NJVEU6IHByb3BzLmRhdGFkb2dTaXRlID8/ICdkYXRhZG9naHEuY29tJyxcbiAgICAgICAgICAgICAgICAuLi4ocHJvcHMuYWdlbnQ/LmFwbT8uZW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRERfQVBNX0VOQUJMRUQ6ICd0cnVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRERfQVBNX1JFQ0VJVkVSX1BPUlQ6IFN0cmluZyhwcm9wcy5hZ2VudD8uYXBtPy5wb3J0ID8/ICc4MTI2JyksXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRERfQVBNX0VOQUJMRUQ6ICdmYWxzZScsXG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgLi4uKHByb3BzLmFnZW50Py5zdGF0c2Q/LmVuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEREX1VTRV9ET0dTVEFUU0Q6ICd0cnVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRERfRE9HU1RBVFNEX1BPUlQ6IFN0cmluZyhwcm9wcy5hZ2VudD8uc3RhdHNkPy5wb3J0ID8/ICc4MTI1JyksXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRERfVVNFX0RPR1NUQVRTRDogJ2ZhbHNlJyxcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWNyZXRzOiB7XG4gICAgICAgICAgICAgICAgRERfQVBJX0tFWTogcHJvcHMuZGF0YWRvZ0FwaUtleVNlY3JldCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwcm9wcy5hZ2VudD8uYXBtPy5lbmFibGVkICYmIHByb3BzLmFnZW50Py5hcG0/LmFwcGxpY2F0aW9uRW52VmFycz8uZG9Ob3RTZXQgIT09IHRydWUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udGFpbmVyTmFtZSBvZiBjb250YWluZXJOYW1lcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRhc2suZmluZENvbnRhaW5lcihjb250YWluZXJOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hZGRFbnZpcm9ubWVudChwcm9wcy5hZ2VudD8uYXBtLmFwcGxpY2F0aW9uRW52VmFycz8uYXBtVHJhY2VFbmFibGVkRW52VmFyTmFtZSA/PyAnRERfVFJBQ0VfRU5BQkxFRCcsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hZGRFbnZpcm9ubWVudChwcm9wcy5hZ2VudD8uYXBtLmFwcGxpY2F0aW9uRW52VmFycz8uYXBtSG9zdEVudlZhck5hbWUgPz8gJ0REX0FHRU5UX0hPU1QnLCAnbG9jYWxob3N0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hZGRFbnZpcm9ubWVudChwcm9wcy5hZ2VudD8uYXBtLmFwcGxpY2F0aW9uRW52VmFycz8uYXBtUG9ydEVudlZhck5hbWUgPz8gJ0REX1RSQUNFX0FHRU5UX1BPUlQnLCBTdHJpbmcocHJvcHMuYWdlbnQ/LmFwbT8ucG9ydCA/PyAnODEyNicpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuYWdlbnQ/LnN0YXRzZD8uZW5hYmxlZCAmJiBwcm9wcy5hZ2VudD8uc3RhdHNkPy5hcHBsaWNhdGlvbkVudlZhcnM/LmRvTm90U2V0ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRhaW5lck5hbWUgb2YgY29udGFpbmVyTmFtZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0YXNrLmZpbmRDb250YWluZXIoY29udGFpbmVyTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuYWRkRW52aXJvbm1lbnQocHJvcHMuYWdlbnQ/LnN0YXRzZD8uYXBwbGljYXRpb25FbnZWYXJzPy5zdGF0c2RIb3N0RW52VmFyTmFtZSA/PyAnU1RBVFNEX0hPU1QnLCAnbG9jYWxob3N0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hZGRFbnZpcm9ubWVudChwcm9wcy5hZ2VudD8uc3RhdHNkPy5hcHBsaWNhdGlvbkVudlZhcnM/LnN0YXRzZFBvcnRFbnZWYXJOYW1lID8/ICdTVEFUU0RfUE9SVCcsIFN0cmluZyhwcm9wcy5hZ2VudD8uc3RhdHNkPy5wb3J0ID8/ICc4MTI1JykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5maXJlTGVuc0xvZ2dpbmc/LmVuYWJsZWQpIHtcbiAgICAgICAgdGFzay5hZGRGaXJlbGVuc0xvZ1JvdXRlcignbG9nX3JvdXRlcicsIHtcbiAgICAgICAgICAgIGltYWdlOiBwcm9wcy5maXJlTGVuc0xvZ2dpbmc/LmltYWdlID8/IGVjcy5Db250YWluZXJJbWFnZS5mcm9tUmVnaXN0cnkoYHB1YmxpYy5lY3IuYXdzL2RhdGFkb2cvYXdzLWZvci1mbHVlbnQtYml0OiR7cHJvcHMuZmlyZUxlbnNMb2dnaW5nPy5pbWFnZVRhZyA/PyAnbGF0ZXN0J31gKSxcbiAgICAgICAgICAgIG1lbW9yeUxpbWl0TWlCOiBwcm9wcy5maXJlTGVuc0xvZ2dpbmc/Lm1lbW9yeUxpbWl0TWlCID8/IDI1NixcbiAgICAgICAgICAgIC4uLihwcm9wcy5maXJlTGVuc0xvZ2dpbmc/LmNwdVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgIGNwdTogcHJvcHMuZmlyZUxlbnNMb2dnaW5nPy5jcHUsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICBmaXJlbGVuc0NvbmZpZzoge1xuICAgICAgICAgICAgICAgIHR5cGU6IGVjcy5GaXJlbGVuc0xvZ1JvdXRlclR5cGUuRkxVRU5UQklULFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlRUNTTG9nTWV0YWRhdGE6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZpcmVsZW5zTG9nRHJpdmVyID0gZWNzLkxvZ0RyaXZlcnMuZmlyZWxlbnMoe1xuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgIE5hbWU6ICdkYXRhZG9nJyxcbiAgICAgICAgICAgICAgICBIb3N0OiBgaHR0cC1pbnRha2UubG9ncy4ke3Byb3BzLmRhdGFkb2dTaXRlID8/ICdkYXRhZG9naHEuY29tJ31gLFxuICAgICAgICAgICAgICAgIFRMUzogJ29uJyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcjogJ2VjcycsXG4gICAgICAgICAgICAgICAgZGRfbWVzc2FnZV9rZXk6ICdsb2cnLFxuICAgICAgICAgICAgICAgIC4uLihwcm9wcy5maXJlTGVuc0xvZ2dpbmc/LnNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRkX3NlcnZpY2U6IHByb3BzLmZpcmVMZW5zTG9nZ2luZz8uc2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgICAgIC4uLihwcm9wcy5maXJlTGVuc0xvZ2dpbmc/LnNvdXJjZVxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGRfc291cmNlOiBwcm9wcy5maXJlTGVuc0xvZ2dpbmc/LnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgICAgIC4uLihwcm9wcy5maXJlTGVuc0xvZ2dpbmc/LnRhZ3NcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRkX3RhZ3M6IGZvcm1hdFRhZ3MocHJvcHMuZmlyZUxlbnNMb2dnaW5nPy50YWdzKSxcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlY3JldE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBhcGlrZXk6IHByb3BzLmRhdGFkb2dBcGlLZXlTZWNyZXQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbnRhaW5lck5hbWUgb2YgY29udGFpbmVyTmFtZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRhc2suZmluZENvbnRhaW5lcihjb250YWluZXJOYW1lKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnRhaW5lci5sb2dEcml2ZXJDb25maWcgPSBmaXJlbGVuc0xvZ0RyaXZlci5iaW5kKGNvbnRhaW5lciwgY29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iXX0=
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./ec2"), exports);
__exportStar(require("./fargate"), exports);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0NBQXNCO0FBQ3RCLDRDQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZWMyJztcbmV4cG9ydCAqIGZyb20gJy4vZmFyZ2F0ZSc7XG4iXX0=
{
"name": "datadog-ecs-cdk",
"version": "1.1.1",
"version": "1.2.0",
"description": "",

@@ -28,6 +28,6 @@ "license": "MIT",

"version": "auto-changelog --hide-credit -p && git add CHANGELOG.md",
"_lint": "eslint 'index.ts' 'test/**/*.ts' jest.config.js",
"_lint": "eslint '*.ts' 'test/**/*.ts' jest.config.js",
"lint": "npm run -- _lint --fix",
"lint-check": "npm run -- _lint --max-warnings 0",
"docs": "typedoc index.ts --includeVersion"
"docs": "typedoc ec2.ts fargate.ts --includeVersion"
},

@@ -34,0 +34,0 @@ "peerDependencies": {

# datadog-ecs-cdk
Docs: https://isotoma.github.io/datadog-ecs-cdk/
NPM: https://www.npmjs.com/package/datadog-ecs-cdk
Source: https://github.com/isotoma/datadog-ecs-cdk
## EC2 example
```typescript
import { EcsDatadogDaemonService } from 'datadog-ecs-cdk';
// ...
new EcsDatadogDaemonService(this, 'EcsDatadog', {
ecsCluster: myCluster,
datadogApiKeySecret: mySecret,
});
```
## Fargate example
```typescript
import { addDatadogToFargateTask } from 'datadog-ecs-cdk';
// ...
const myTaskDef = ...
addDatadogToFargateTask(myTaskDef, {
datadogApiKeySecret: ecs.Secret.fromSecretsManager(mySecret),
agent: {
enabled: true,
statsd: {
enabled: true,
},
},
fireLensLogging: {
enabled: true,
service: 'myservice',
source: 'myservice',
},
});
```
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc