-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdatadog-dashboard.ts
38 lines (36 loc) · 1.11 KB
/
datadog-dashboard.ts
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
import { CfnResource } from "aws-cdk-lib";
import * as camelcaseKeys from "camelcase-keys";
import { Construct } from "constructs";
import { snakeCaseKeys } from "../util";
import { Dashboard } from "./datadog-api-dashboard.generated";
import { DatadogDashboardProps } from "./datadog-dashboard-schema.generated";
/**
* Wrapper for generated Schema with typed dashboard property
*/
export interface DataDogDashboardCfnOptions extends DatadogDashboardProps {
/** Typed Dashboard instance */
readonly dashboard?: Dashboard;
}
/**
* Datadog Dashboard 2.1.0
*/
export class DatadogDashboard {
constructor(scope: Construct, id: string, props: DataDogDashboardCfnOptions) {
let propsCopy = { ...props };
if (props.dashboard) {
propsCopy = {
...props,
dashboardDefinition: JSON.stringify(snakeCaseKeys(props.dashboard)),
};
delete propsCopy.dashboard;
}
const cfnProperties = camelcaseKeys(propsCopy, {
deep: true,
pascalCase: true,
});
new CfnResource(scope, id, {
type: "Datadog::Dashboards::Dashboard",
properties: { ...cfnProperties },
});
}
}