import { Construct } from "constructs";
import { IAlarm, IAlarmAction, Metric } from "aws-cdk-lib/aws-cloudwatch";
import { RemovalPolicy, ResourceEnvironment, Stack } from "aws-cdk-lib";
import { ExtendedAlarm, ExtendedCreateAlarmOptions } from "./extended-alarm";
import { ITopic } from "aws-cdk-lib/aws-sns";
export interface MetricAlarmBaseProps extends ExtendedCreateAlarmOptions {
    /**
     * Name of the alarm
     *
     * @default Automatically generated name
     */
    readonly alarmName?: string;
    /**
     * Description for the alarm
     *
     * @default No description
     */
    readonly alarmDescription?: string;
}
export declare abstract class MetricAlarmBase<P extends MetricAlarmBaseProps> extends Construct implements IAlarm {
    readonly alarm: ExtendedAlarm;
    readonly metric: Metric;
    readonly alarmArn: string;
    readonly alarmName: string;
    readonly env: ResourceEnvironment;
    readonly stack: Stack;
    protected abstract createMetric(props: P): Metric;
    protected abstract createAlarm(metric: Metric, props: P): ExtendedAlarm;
    constructor(scope: Construct, id: string, props: P);
    /**
     * Notify SNS topics if the alarm fires.
     *
     * @param topics the topics to notify
     */
    addAlarmTopic(...topics: ITopic[]): void;
    /**
     * Notify SNS topics if the alarm returns from breaching a state into an ok state.
     *
     * @param topics the topics to notify
     */
    addOkTopic(...topics: ITopic[]): void;
    /**
     * Notify SNS topics if there is insufficient data to evaluate the alarm.
     *
     * @param topics the topics to notify
     */
    addInsufficientDataTopic(...topics: ITopic[]): void;
    /**
     * Trigger actions if the alarm fires.
     *
     * @param actions the actions to trigger
     */
    addAlarmAction(...actions: IAlarmAction[]): void;
    /**
     * Trigger actions if there is insufficient data to evaluate the alarm.
     *
     * @param actions the actions to trigger
     */
    addInsufficientDataAction(...actions: IAlarmAction[]): void;
    /**
     * Trigger actions if the alarm returns from breaching a state into an ok state.
     *
     * @param actions the actions to trigger
     */
    addOkAction(...actions: IAlarmAction[]): void;
    applyRemovalPolicy(policy: RemovalPolicy): void;
    renderAlarmRule(): string;
}
