import { DatadogMonitor } from './datadog-monitor';
/**
 * Interface to plug in specific notification types for monitors in Datadog.
 * One instance could be reused over multiple monitors, e.g. when using the {@link ./../watchfulv2#watchful.ts} construct.
 */
export interface INotification {
    /**
     * Example - route all pipeline monitors to a specific channel:
     * ```ts
     *  generateMessageAnnotation(monitor: DatadogMonitor): string {
     *    if (monitor.name.indexOf('pipeline') > -1) {
     *      return '@slack-team-pipeline-alert-channel';
     *    } else {
     *      return '@slack-team-serious-issue-alert-channel';
     *    }
     *  }
     * ```
     *
     * Example - route issues based on their priority:
     * ```ts
     *  generateMessageAnnotation(monitor: DatadogMonitor): string {
     *    if (monitor.priority <= 2) {
     *      return '@<pager-integration>-team-schedule';
     *    } else if (monitor.priority == 3) {
     *      return '@slack-team-alert-channel';
     *    } else {
     *      return NoNotification.DO_NOT_NOTIFY;
     *    }
     *  }
     * ```
     *
     * @param monitor - the monitor on which the notification should be applied.
     * @returns the integration handle to route alert notifications to specific integrations in Datadog.
     */
    generateMessageAnnotation(monitor: DatadogMonitor): string;
}
/**
 * {@link INotification} implementation, that explicitly suppresses notifications. Per default every monitor
 * has a Slack notification. In order to create a {@link DatadogMonitor} just for a {@link ./datadog-monitor.ts.#DatadogMonitor}
 * without further notification.
 */
export declare class NoNotification implements INotification {
    /**
     * This phrase is explicitly filtered out during message generation.
     */
    static readonly DO_NOT_NOTIFY = "";
    generateMessageAnnotation(_monitor: DatadogMonitor): string;
}
/**
 * Properties of {@link SlackNotification}
 */
export interface SlackNotificationProps {
    /**
     * the Slack channel to route the alert to.
     */
    readonly channel: string;
}
/**
 * An {@link INotification}, that forwards alerts to the Slack channel passed in props.
 */
export declare class SlackNotification implements INotification {
    private readonly props;
    constructor(props: SlackNotificationProps);
    generateMessageAnnotation(_monitor: DatadogMonitor): string;
}
/**
 * An {@link INotification}, that forwards alerts to the Slack channel, that was entered
 * as alert channel during account creation process. The actual channel value is taken from
 * ssm parameter `/config/team/slack-alert-channel`.
 * This notification could break the deployment, if the ssm parameter is not set.
 */
export declare class DefaultSlackNotification implements INotification {
    generateMessageAnnotation(monitor: DatadogMonitor): string;
}
/**
 * An {@link INotification}, that forwards alerts to the RIO paging router
 * to engage the corresponding team.
 * Alerts with Priority \> {@link RioPagingNotification.MINIMUM_PRIORITY} will not be taken into account.
 */
export declare class RioPagingNotification implements INotification {
    static readonly MINIMUM_PRIORITY = 2;
    generateMessageAnnotation(monitor: DatadogMonitor): string;
}
/**
 * An {@link INotification}, that uses the team_identifier to create
 * a case in a team project in Datadogs CaseManagement.
 * It can be used to not lose e.g. an log alert, that is recovering
 * automatically after a while.
 *
 * To use it, setup a project in Datadog case management and configure
 * the integration handle according to the naming convention.
 */
export declare class DatadogCaseNotification implements INotification {
    generateMessageAnnotation(monitor: DatadogMonitor): string;
}
/**
 * Helper to combine multiple {@link INotification} into one.
 */
export declare class NotificationAggregator implements INotification {
    private readonly notifications;
    constructor(notifications: INotification[]);
    generateMessageAnnotation(monitor: DatadogMonitor): string;
}
