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 '@-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; }