import { IAspect, aws_s3 as s3, aws_cloudwatch as cloudwatch, Duration } from 'aws-cdk-lib';
import { IConstruct, Construct } from 'constructs';
import { AlarmBaseProps } from './common';
/**
 * The recommended metrics for S3 bucket alarms.
 */
export declare enum S3RecommendedAlarmsMetrics {
    /**
     * 4xxErrors are errors (4xx error codes) that are made in response to client requests.
     */
    ERRORS_4XX = "4xxErrors",
    /**
     * 5xxErrors are server errors (5xx error codes) that are made in response to client requests.
     */
    ERRORS_5XX = "5xxErrors"
}
/**
 * The optional configuration for the 4xx and 5xx error alarms for an S3 bucket.
 */
export interface S3BucketHttpErrorsAlarmConfig extends AlarmBaseProps {
    /**
     * The period over which the specified statistic is applied.
     *
     * @default Duration.minutes(1)
     */
    readonly period?: Duration;
    /**
     * The value against which the specified statistic is compared.
     *
     * @default 0.05
     */
    readonly threshold?: number;
    /**
     * The number of periods over which data is compared to the specified threshold.
     *
     * @default 15
     */
    readonly evaluationPeriods?: number;
    /**
     * The number of data points that must be breaching to trigger the alarm.
     *
     * @default 15
     */
    readonly datapointsToAlarm?: number;
}
/**
 * Configuration for the 4xx errors alarm.
 */
export interface S3Bucket4xxErrorsAlarmConfig extends S3BucketHttpErrorsAlarmConfig {
    /**
     * The alarm name.
     *
     * @default - bucket.bucketName + ' - 4xxErrors'
     */
    readonly alarmName?: string;
    /**
     * The alarm description.
     *
     * @default - This alarm helps us report the total number of 4xx error status codes
     * that are made in response to client requests. 403 error codes might indicate an
     * incorrect IAM policy, and 404 error codes might indicate mis-behaving client application,
     * for example. Enabling S3 server access logging on a temporary basis will help you to
     * pinpoint the issue's origin using the fields HTTP status and Error Code. To understand
     * more about the error code, see Error Responses
     * (https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html).
     */
    readonly alarmDescription?: string;
}
/**
 * Properties for the S3Bucket4xxErrorsAlarm construct.
 */
export interface S3Bucket4xxErrorsAlarmProps extends S3Bucket4xxErrorsAlarmConfig {
    /**
     * The S3 bucket to monitor.
     */
    readonly bucket: s3.IBucket;
}
/**
 * An alarm that monitors the 4xx errors for an S3 bucket.
 *
 * This alarm is used to create a baseline for typical 4xx error
 * rates so that you can look into any abnormalities that might
 * indicate a setup issue.
 *
 * The alarm is triggered when the 4xx error rate exceeds the % threshold.
 */
export declare class S3Bucket4xxErrorsAlarm extends cloudwatch.Alarm {
    constructor(scope: IConstruct, id: string, props: S3Bucket4xxErrorsAlarmProps);
}
/**
 * Configuration for the 5xx errors alarm.
 */
export interface S3Bucket5xxErrorsAlarmConfig extends S3BucketHttpErrorsAlarmConfig {
    /**
     * The alarm name.
     *
     * @default - bucket.bucketName + ' - 5xxErrors'
     */
    readonly alarmName?: string;
    /**
     * The alarm description.
     *
     * @default - This alarm helps you detect a high number of server-side errors. These errors indicate
     * that a client made a request that the server couldn’t complete. This can help you correlate the
     * issue your application is facing because of S3. For more information to help you efficiently
     * handle or reduce errors, see Optimizing performance design patterns
     * (https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance-design-patterns.html#optimizing-performance-timeouts-retries).
     * Errors might also be caused by an the issue with S3, check AWS service health dashboard for the status of Amazon S3 in your Region.
     */
    readonly alarmDescription?: string;
}
/**
 * Properties for the S3Bucket5xxErrorsAlarm construct.
 */
export interface S3Bucket5xxErrorsAlarmProps extends S3Bucket5xxErrorsAlarmConfig {
    /**
     * The S3 bucket to monitor.
     */
    readonly bucket: s3.IBucket;
}
/**
 * An alarm that monitors the 5xx errors for an S3 bucket.
 *
 * This alarm can help to detect if the application is
 * experiencing issues due to 5xx errors.
 *
 * The alarm is triggered when the 5xx error rate exceeds the % threshold.
 */
export declare class S3Bucket5xxErrorsAlarm extends cloudwatch.Alarm {
    constructor(scope: IConstruct, id: string, props: S3Bucket5xxErrorsAlarmProps);
}
/**
 * Configurations for the recommended alarms for an S3 bucket.
 *
 * Default actions are overridden by the actions specified in the
 * individual alarm configurations.
 */
export interface S3RecommendedAlarmsConfig {
    /**
     * The default action to take when an alarm is triggered.
     *
     * @default - None
     */
    readonly defaultAlarmAction?: cloudwatch.IAlarmAction;
    /**
     * The default action to take when an alarm enters the ok state.
     *
     * @default - None
     */
    readonly defaultOkAction?: cloudwatch.IAlarmAction;
    /**
     * The default action to take when an alarm has insufficient data.
     *
     * @default - None
     */
    readonly defaultInsufficientDataAction?: cloudwatch.IAlarmAction;
    /**
     * How to handle missing data for this alarm.
     *
     * @default TreatMissingData.MISSING
     */
    readonly treatMissingData?: cloudwatch.TreatMissingData;
    /**
     * Alarm metrics to exclude from the recommended alarms.
     *
     * @default - None
     */
    readonly excludeAlarms?: S3RecommendedAlarmsMetrics[];
    /**
     * The resources to exclude from the recommended alarms.
     *
     * Use a resources id to exclude a specific resource.
     */
    readonly excludeResources?: string[];
    /**
     * The configuration for the 4xx errors alarm.
     */
    readonly config4xxErrorsAlarm?: S3Bucket4xxErrorsAlarmConfig;
    /**
     * The configuration for the 5xx errors alarm.
     */
    readonly config5xxErrorsAlarm?: S3Bucket5xxErrorsAlarmConfig;
}
export interface S3RecommendedAlarmsProps extends S3RecommendedAlarmsConfig {
    /**
     * The S3 bucket to apply the recommended alarms to.
     */
    readonly bucket: s3.IBucket;
}
/**
 * A construct that creates the recommended alarms for an S3 bucket.
 *
 * @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#S3
 */
export declare class S3RecommendedAlarms extends Construct {
    /**
     * The 4xx errors alarm.
     */
    readonly alarm4xxErrors?: S3Bucket4xxErrorsAlarm;
    /**
     * The 5xx errors alarm.
     */
    readonly alarm5xxErrors?: S3Bucket5xxErrorsAlarm;
    constructor(scope: Construct, id: string, props: S3RecommendedAlarmsProps);
}
/**
 * An extension for the S3 Bucket construct that provides methods
 * to create recommended alarms.
 */
export declare class Bucket extends s3.Bucket {
    constructor(scope: Construct, id: string, props?: s3.BucketProps);
    /**
     * Creates an alarm that monitors the 4xx errors for the S3 bucket.
     */
    alarm4xxErrors(props?: S3Bucket4xxErrorsAlarmConfig): S3Bucket4xxErrorsAlarm;
    /**
     * Creates an alarm that monitors the 5xx errors for the S3 bucket.
     */
    alarm5xxErrors(props?: S3Bucket5xxErrorsAlarmConfig): S3Bucket5xxErrorsAlarm;
    /**
     * Creates the recommended alarms for the S3 bucket.
     *
     * @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#S3
     */
    applyRecommendedAlarms(props?: S3RecommendedAlarmsConfig): S3RecommendedAlarms;
}
/**
 * Configures the recommended alarms for an S3 bucket.
 *
 * @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Best_Practice_Recommended_Alarms_AWS_Services.html#S3
 */
export declare class S3RecommendedAlarmsAspect implements IAspect {
    private readonly props?;
    constructor(props?: S3RecommendedAlarmsConfig | undefined);
    visit(node: IConstruct): void;
}
