import { aws_cloudwatch } from 'aws-cdk-lib';
import { Construct, IConstruct } from 'constructs';
import { IApiGatewayMetricProps, ICloudfrontMetricProps, IGraphqlApiMetricProps, IElasticSearchApiMetricProps } from '../metrics';
export type ApiServiceType = {
    typeName: 'APIGateway';
} & IApiGatewayMetricProps;
export type GraphqlApiServiceType = {
    typeName: 'GraphqlApi';
} & IGraphqlApiMetricProps;
export type CloudfrontServiceType = {
    typeName: 'Cloudfront';
} & ICloudfrontMetricProps;
export type ElasticSearchApiServiceType = {
    typeName: 'ElasticSearchApi';
} & IElasticSearchApiMetricProps;
export type AnyServiceType = ApiServiceType | CloudfrontServiceType | GraphqlApiServiceType | ElasticSearchApiServiceType;
export interface SummaryDashboardProps extends aws_cloudwatch.DashboardProps {
    /**
     * List of service types and the required props for the types.
     *
     */
    services?: AnyServiceType[];
    /**
     * If given a list of lambda names, the dashboard will additionally
     * add widgets to monitor concurrency and duration limits for any
     * Lambdas that begin with those names.
     */
    lambdaNames?: string[];
    /**
     * When true, will hide the annotation for the 30s integration timeout on the
     * Lambda Duration widget. This can be useful if many of your lambdas are not
     * used as part of integrations with APIs, and are often above the 30s threshold,
     * which will misleadingly look like an issue.
     * Default is false, meaning the annotation will be displayed.
     */
    hideLambdaIntegrationTimeoutAnnotation?: boolean;
}
export interface DiscoverProps extends SummaryDashboardProps {
    /**
     * The root node to begin the search
     */
    discoverRoot: IConstruct;
    /**
     * Excluding the given stacks will prevent searching for nodes withing the stack. Default is []
     */
    excludeStacks?: string[];
    /**
     * If true, will add all discovered Lambdas to lambdaNames when constructing the SummaryDashboard. Default is true
     */
    includeLambdas?: boolean;
    /**
     * Some resources, such as Cloudfront distributions, will have no deterministic way to create a user friendly label.
     * This provides a way to specify a custom label to use for nodes that are found. Provide a mapping of ConstructNode.addr
     * to the label desired.
     */
    serviceLabels?: {
        [addr: string]: string;
    };
}
export declare class SummaryDashboard extends aws_cloudwatch.Dashboard {
    /**
     * Creates a dashboard with debug/informational metrics for an API Gateway.
     * It will create widgets to track requests, errors and latencies for the
     * API, all of its methods, and any lambda integrations. Assumes that method
     * names and lambda names begin with the api name.
     */
    constructor(scope: Construct, id: string, props: SummaryDashboardProps);
    /**
     * Constructs a SummaryDashboard by searching the tree for known resources. You can optionally still provide
     * a starting list of services to build on, but note that this will not deduplicate, so only do this if
     * this method misses a service.
     */
    static fromTree(scope: Construct, id: string, props: DiscoverProps): SummaryDashboard;
    private static visit;
    private static traverse;
}
