import { aws_cloudwatch, aws_sns } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { AnySLO, IAlertConfig, IMultiWindowAlert } from './types';
export interface ISLOAlarmsProps {
    /**
     * Link to the primary dashboard to direct the responder to for troubleshooting
     */
    readonly dashboardLink: string;
    /**
     * Link to the runbook for performing troubleshooting steps
     */
    readonly runbookLink: string;
    /**
     * Optional link to a dashboard of all of the alarms
     */
    readonly alarmsDashboardLink?: string;
    /**
     * Array of slos to create alarms for. All items must match the properties defined
     * by one of the types in AnySLO
     */
    readonly slos: AnySLO[];
}
/**
 * Function signature for an Alarm factory
 */
type AlarmFactory = (sloWindow: IAlertConfig, scope: Construct, slo: AnySLO, alarmName: string) => aws_cloudwatch.Alarm;
/**
 * KVPs where the key is the severity and the value is the SNS topic associated with that severity
 */
interface ITopicSeverities {
    [key: string]: aws_sns.Topic;
}
/**
 * Grouping of parent (composite) alarms, the child alarms that their expression is based on, and the severity
 * that they are assosciated with
 */
interface IAlarmsBySeverities {
    severity: string;
    parentAlarm: aws_cloudwatch.CfnCompositeAlarm;
    childAlarms: aws_cloudwatch.Alarm[][];
}
/**
 * Creates multi-window alarms using CloudWatch composite alarms from a list of slo objects.
 * Also creates an SNS topic as an action for the parent alarm.
 */
export declare class SLOAlarms extends Construct {
    /**
     * Factory method for constructing an Alarm based on an ApiAvailabilitySLO
     */
    static apiAvailabilityAlarm: (sloWindow: IAlertConfig, scope: Construct, slo: AnySLO, alarmName: string) => aws_cloudwatch.Alarm;
    /**
     * Factory method for constructing an Alarm based on an ApiLatencySLO
     */
    static apiLatencyAlarm: (sloWindow: IAlertConfig, scope: Construct, slo: AnySLO, alarmName: string) => aws_cloudwatch.Alarm;
    /**
     * Factory method for constructing an Alarm based on an AppSyncAvailabilitySLO
     */
    static appSyncAvailabilityAlarm: (sloWindow: IAlertConfig, scope: Construct, slo: AnySLO, alarmName: string) => aws_cloudwatch.Alarm;
    /**
     * Factory method for constructing an Alarm based on an AppSyncLatencySLO
     */
    static appSyncLatencyAlarm: (sloWindow: IAlertConfig, scope: Construct, slo: AnySLO, alarmName: string) => aws_cloudwatch.Alarm;
    /**
     * Factory method for constructing an Alarm based on an CloudfrontAvailabilitySLO
     */
    static cloudfrontAvailabilityAlarm: (sloWindow: IAlertConfig, scope: Construct, slo: AnySLO, alarmName: string) => aws_cloudwatch.Alarm;
    /**
     * Factory method for constructing an Alarm based on an CloudfrontLatencySLO
     */
    static cloudfrontLatencyAlarm: (sloWindow: IAlertConfig, scope: Construct, slo: AnySLO, alarmName: string) => aws_cloudwatch.Alarm;
    /**
     * Factory method for constructing an Alarm based on an ElasticSearchAvailabilitySLO
     */
    static elasticSearchAvailabilityAlarm: (sloWindow: IAlertConfig, scope: Construct, slo: AnySLO, alarmName: string) => aws_cloudwatch.Alarm;
    /**
     * Factory method for constructing an Alarm based on an ElasticSearchLatencySLO
     */
    static elasticSearchLatencyAlarm: (sloWindow: IAlertConfig, scope: Construct, slo: AnySLO, alarmName: string) => aws_cloudwatch.Alarm;
    /**
     * Factory method for constructing an Alarm based on an CustomAvailabilitySLO
     */
    static customAvailabilityAlarm: (sloWindow: IAlertConfig, scope: Construct, slo: AnySLO, alarmName: string) => aws_cloudwatch.Alarm;
    /**
     * Factory method for constructing an Alarm based on an CustomLatencySLO
     */
    static customLatencyAlarm: (sloWindow: IAlertConfig, scope: Construct, slo: AnySLO, alarmName: string) => aws_cloudwatch.Alarm;
    /**
     * Factory method for creating a composite alarm expression from the grid of alarms
     */
    static createCompositeAlarm: (childAlarms: aws_cloudwatch.Alarm[][]) => string;
    /**
     * Factory method for creating all multi-window, multi-burn rate alarms for an SLO
     */
    static createAlarms: (windows: IMultiWindowAlert[], scope: Construct, alarmDescription: string, topics: ITopicSeverities, slo: AnySLO, parentName: string, alarmFactory: AlarmFactory) => {
        severity: string;
        parentAlarm: aws_cloudwatch.CfnCompositeAlarm;
        childAlarms: aws_cloudwatch.Alarm[][];
    }[];
    /**
     * List of alarms that were created, grouped by severity
     */
    alarms: IAlarmsBySeverities[];
    /**
     * Each SNS topic created for each severity
     */
    topics: ITopicSeverities;
    constructor(scope: Construct, id: string, props: ISLOAlarmsProps);
}
export {};
