import type { Duration } from '../../core';
/**
 * Interface for metrics
 */
export interface IMetric {
    /**
     * Any warnings related to this metric
     *
     * Should be attached to the consuming construct.
     *
     * @default - None
     * @deprecated - use warningsV2
     */
    readonly warnings?: string[];
    /**
     * Any warnings related to this metric
     *
     * Should be attached to the consuming construct.
     *
     * @default - None
     */
    readonly warningsV2?: {
        [id: string]: string;
    };
    /**
     * Inspect the details of the metric object
     */
    toMetricConfig(): MetricConfig;
}
/**
 * Metric dimension
 *
 * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-dimension.html
 */
export interface Dimension {
    /**
     * Name of the dimension
     */
    readonly name: string;
    /**
     * Value of the dimension
     */
    readonly value: any;
}
/**
 * Statistic to use over the aggregation period
 *
 * @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Statistics-definitions.html
 * @deprecated Use one of the factory methods on `Stats` to produce statistics strings
 */
export declare enum Statistic {
    /**
     * The count (number) of data points used for the statistical calculation.
     */
    SAMPLE_COUNT = "SampleCount",
    /**
     * The value of Sum / SampleCount during the specified period.
     */
    AVERAGE = "Average",
    /**
     * All values submitted for the matching metric added together.
     * This statistic can be useful for determining the total volume of a metric.
     */
    SUM = "Sum",
    /**
     * The lowest value observed during the specified period.
     * You can use this value to determine low volumes of activity for your application.
     */
    MINIMUM = "Minimum",
    /**
     * The highest value observed during the specified period.
     * You can use this value to determine high volumes of activity for your application.
     */
    MAXIMUM = "Maximum"
}
/**
 * Unit for metric
 */
export declare enum Unit {
    /**
     * Seconds
     */
    SECONDS = "Seconds",
    /**
     * Microseconds
     */
    MICROSECONDS = "Microseconds",
    /**
     * Milliseconds
     */
    MILLISECONDS = "Milliseconds",
    /**
     * Bytes
     */
    BYTES = "Bytes",
    /**
     * Kilobytes
     */
    KILOBYTES = "Kilobytes",
    /**
     * Megabytes
     */
    MEGABYTES = "Megabytes",
    /**
     * Gigabytes
     */
    GIGABYTES = "Gigabytes",
    /**
     * Terabytes
     */
    TERABYTES = "Terabytes",
    /**
     * Bits
     */
    BITS = "Bits",
    /**
     * Kilobits
     */
    KILOBITS = "Kilobits",
    /**
     * Megabits
     */
    MEGABITS = "Megabits",
    /**
     * Gigabits
     */
    GIGABITS = "Gigabits",
    /**
     * Terabits
     */
    TERABITS = "Terabits",
    /**
     * Percent
     */
    PERCENT = "Percent",
    /**
     * Count
     */
    COUNT = "Count",
    /**
     * Bytes/second (B/s)
     */
    BYTES_PER_SECOND = "Bytes/Second",
    /**
     * Kilobytes/second (kB/s)
     */
    KILOBYTES_PER_SECOND = "Kilobytes/Second",
    /**
     * Megabytes/second (MB/s)
     */
    MEGABYTES_PER_SECOND = "Megabytes/Second",
    /**
     * Gigabytes/second (GB/s)
     */
    GIGABYTES_PER_SECOND = "Gigabytes/Second",
    /**
     * Terabytes/second (TB/s)
     */
    TERABYTES_PER_SECOND = "Terabytes/Second",
    /**
     * Bits/second (b/s)
     */
    BITS_PER_SECOND = "Bits/Second",
    /**
     * Kilobits/second (kb/s)
     */
    KILOBITS_PER_SECOND = "Kilobits/Second",
    /**
     * Megabits/second (Mb/s)
     */
    MEGABITS_PER_SECOND = "Megabits/Second",
    /**
     * Gigabits/second (Gb/s)
     */
    GIGABITS_PER_SECOND = "Gigabits/Second",
    /**
     * Terabits/second (Tb/s)
     */
    TERABITS_PER_SECOND = "Terabits/Second",
    /**
     * Count/second
     */
    COUNT_PER_SECOND = "Count/Second",
    /**
     * None
     */
    NONE = "None"
}
/**
 * Properties of a rendered metric
 */
export interface MetricConfig {
    /**
     * In case the metric represents a query, the details of the query
     *
     * @default - None
     */
    readonly metricStat?: MetricStatConfig;
    /**
     * In case the metric is a math expression, the details of the math expression
     *
     * @default - None
     */
    readonly mathExpression?: MetricExpressionConfig;
    /**
     * In case the metric is a search expression, the details of the search expression
     *
     * @default - None
     */
    readonly searchExpression?: MetricExpressionConfig;
    /**
     * Additional properties which will be rendered if the metric is used in a dashboard
     *
     * Examples are 'label' and 'color', but any key in here will be
     * added to dashboard graphs.
     *
     * @default - None
     */
    readonly renderingProperties?: Record<string, unknown>;
}
/**
 * Properties for a concrete metric
 *
 * NOTE: `unit` is no longer on this object since it is only used for `Alarms`, and doesn't mean what one
 * would expect it to mean there anyway. It is most likely to be misused.
 */
export interface MetricStatConfig {
    /**
     * The dimensions to apply to the alarm
     *
     * @default []
     */
    readonly dimensions?: Dimension[];
    /**
     * Namespace of the metric
     */
    readonly namespace: string;
    /**
     * Name of the metric
     */
    readonly metricName: string;
    /**
     * How many seconds to aggregate over
     */
    readonly period: Duration;
    /**
     * Aggregation function to use (can be either simple or a percentile)
     */
    readonly statistic: string;
    /**
     * Unit used to filter the metric stream
     *
     * Only refer to datums emitted to the metric stream with the given unit and
     * ignore all others. Only useful when datums are being emitted to the same
     * metric stream under different units.
     *
     * This field has been renamed from plain `unit` to clearly communicate
     * its purpose.
     *
     * @default - Refer to all metric datums
     */
    readonly unitFilter?: Unit;
    /**
     * Region which this metric comes from.
     *
     * @default Deployment region.
     */
    readonly region?: string;
    /**
     * Account which this metric comes from.
     *
     * @default Deployment account.
     */
    readonly account?: string;
    /**
     * Region set directly on the metric, not inherited from the attached stack.
     *
     * @default No override.
     */
    readonly regionOverride?: string;
    /**
     * Account set directly on the metric, not inherited from the attached stack.
     *
     * @default No override.
     */
    readonly accountOverride?: string;
}
/**
 * Properties for a concrete metric
 */
export interface MetricExpressionConfig {
    /**
     * Math expression for the metric.
     */
    readonly expression: string;
    /**
     * Metrics used in the math expression
     */
    readonly usingMetrics: Record<string, IMetric>;
    /**
     * How many seconds to aggregate over
     */
    readonly period: number;
    /**
     * Account to evaluate search expressions within.
     *
     * @default - Deployment account.
     */
    readonly searchAccount?: string;
    /**
     * Region to evaluate search expressions within.
     *
     * @default - Deployment region.
     */
    readonly searchRegion?: string;
}
