UNPKG

@khulnasoft/cdk

Version:

Define your observability as code using the AWS CDK

60 lines (51 loc) 1.8 kB
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", }, }); } }