import { Duration } from 'aws-cdk-lib';
import { IAlertConfig, Severity } from './types';
/**
 * Encapsulates the properties of SLO alerting windows and provides a set of presets
 * that we'll commonly use.
 */
export declare class Windows {
    /**
     * 2% of 30 Day window in 5 minutes
     */
    static readonly twoPercentShort: IAlertConfig;
    /**
     * 2% of 30 Day window in 1 hour
     */
    static readonly twoPercentLong: IAlertConfig;
    /**
     * Experimental!
     * 2% of 30 Day window in 2 hours
     */
    static readonly twoPercentExtraLong: IAlertConfig;
    /**
     * 5% of 30 Day window in 30 minutes
     */
    static readonly fivePercentShort: IAlertConfig;
    /**
     * 5% of 30 Day window in 6 hours
     */
    static readonly fivePercentLong: IAlertConfig;
    /**
     * Experimental!
     * 5% of 30 Day window in 12 hours
     */
    static readonly fivePercentExtraLong: IAlertConfig;
    /**
     * Experimental!
     * 3.3333% of 30 Day window in 1 day. Useful for low % SLOs, but should not be used if you can avoid
     * it since it will be more sensitive to false positives.
     */
    static readonly oneDaySensitive: IAlertConfig;
    /**
     * 10% of 30 Day window in 6 hours.
     */
    static readonly tenPercentShort: IAlertConfig;
    /**
     * 10% of 30 Day window in 1 day.
     * Note: Google recommends 3 days for 10% long window, but since
     * we cannot do a 3 day alarm for the long window, we're making
     * a 1 day period
     */
    static readonly tenPercentMedium: IAlertConfig;
    /**
     * 10% of 30 Day window in 3 days.
     * NOTE: This one can only be used for graphing in a widget. Cloudwatch Alerts are currently limited to metrics <= 1 day
     */
    static readonly tenPercentLong: IAlertConfig;
    /**
     * 100% of 30 Day window in 30 days.
     * NOTE: This one can only be used for graphing in a widget. Cloudwatch Alerts are currently limited to metrics <= 1 day
     */
    static readonly thirtyDays: IAlertConfig;
    /**
     * The golden standards from Google.
     */
    static readonly standardWindows: IAlertConfig[];
    /**
     * The multi-window golden standards from Google.
     */
    static readonly standardMultiWindows: {
        windows: IAlertConfig[];
        severity: Severity;
    }[];
    /**
     * The golden standards from Google, limited to one day for AWS alarms.
     */
    static readonly standardAlarmWindows: IAlertConfig[];
    /**
     * The multi-window golden standards from Google, limited to one day for AWS alarms.
     */
    static readonly standardAlarmMultiWindows: {
        windows: IAlertConfig[];
        severity: Severity;
    }[];
    /**
     * Experimental!
     * Useful for SLOs between 90 and 93%.
     */
    static readonly doubleWindows: IAlertConfig[];
    /**
     * Experimental!
     * Useful for SLOs between 90 and 93%, limited to one day for AWS alarms.
     */
    static readonly doubleAlarmWindows: IAlertConfig[];
    /**
     * Experimental!
     * Useful for SLOs like 70%, 50% etc. The smallest window we can use is one day here.
     */
    static readonly lowPercentWindows: IAlertConfig[];
    /**
     * Experimental!
     * Useful for SLOs like 70%, 50% etc, limited to one day for AWS alarms. The smallest window we can use is one day here.
     */
    static readonly lowPercentAlarmWindows: IAlertConfig[];
    /**
     * Calculates a target burn rate threshold for an alert config
     */
    static readonly burnRate: (alertConfig: IAlertConfig) => number;
    /**
     * Ex: "X% of Y Day budget burned in Z hours"
     */
    static readonly description: (alertConfig: IAlertConfig) => string;
    /**
     * Allows defining a custom alert config if none of the predefined values work
     */
    static readonly custom: (percent: number, period: Duration, alertWindow: Duration) => IAlertConfig;
    /**
     * Experimental!
     * Helper for selecting what windows to use for a given threshold. We can't always use the standard windows that Google defines.
     * Their windows work well for 99.x%, but not for thresholds 93% and below. This will help generate a list of windows to use
     * based on the SLO.
     */
    static readonly alarmWindowSelector: (sloThreshold: number) => IAlertConfig[];
    /**
     * Helper for selecting what windows to use for a given threshold. We can't always use the standard windows that Google defines.
     * Their windows work well for 99.x%, but not for thresholds 93% and below. This will help generate a list of windows to use
     * based on the SLO.
     */
    static readonly dashWindowSelector: (sloThreshold: number) => IAlertConfig[];
}
