@khulnasoft/cdk
Version:
Define your observability as code using the AWS CDK
60 lines (51 loc) • 1.8 kB
text/typescript
import { CfnResource, Stack } from "aws-cdk-lib";
import { Kengine as Config } from "../config";
import { Query } from "./query";
import { AlertProps, DeploymentAlertParameters } from "../types/alert";
export class Alert<TKey extends string> extends CfnResource {
constructor(id: string, props: AlertProps<TKey>) {
const defaultFrequency = "1h";
const defaultWindow = "1h";
let Parameters: DeploymentAlertParameters | undefined = undefined;
if ("ref" in props.parameters.query) {
Parameters = {
...props.parameters,
threshold: props.parameters.threshold || { operation: "=", value: 0 },
query: props.parameters.query.ref,
frequency: props.parameters.frequency || defaultFrequency,
window: props.parameters.window || defaultWindow,
};
}
if ("filters" in props.parameters.query) {
const query = new Query(`${id}-query`, {
parameters: {
...props.parameters.query,
calculations: props.parameters.query.calculations || [
{ operation: "COUNT" },
],
},
});
Parameters = {
...props.parameters,
threshold: props.parameters.threshold || { operation: "=", value: 0 },
query: query.ref,
frequency: props.parameters.frequency || defaultFrequency,
window: props.parameters.window || defaultWindow,
};
}
if (!Parameters) throw new Error("Invalid alert parameters. Declare at least one of filters or ref in the query.")
super(Config.getConstruct(), id, {
type: "Custom::KengineAlert",
properties: {
id,
ServiceToken: Config.getServiceToken(),
KengineApiKey: Config.getApiKey(),
enabled: props.enabled,
Description: props.description,
Parameters,
Channels: props.channels || Config.getDefaultChannel() && [Config.getDefaultChannel()],
Origin: "cdk",
},
});
}
}