# alert if there are more than 2 messages in DLQ topic in last 15 minutes.
resource "datadog_monitor" "dlq_monitor" {
  count   = 1
  name    = "${var.environment}-${var.smf_service_name}-DLQ-monitor"
  type    = "metric alert"
  message = "[${var.environment}] ${var.smf_service_name} sent a message into DLQ topic. Notify: ${var.notification_endpoints}"

  query = "max(last_15m):avg:aws.kafka.messages_in_per_sec{cluster_name:${var.kafka_topics_cluster_name},topic:${lower(var.dlq_topic_name)}} > ${var.dlq_number_errors}"

  monitor_thresholds {
    critical = var.dlq_number_errors
  }

  notify_no_data      = false
  notify_audit        = false
  renotify_interval   = 60
  timeout_h           = 1
  require_full_window = false
  renotify_statuses   = ["alert"]
  tags                = local.datadog_tags
}


resource "datadog_monitor" "vendor_5xx_errors_monitor" {
  count   = 1
  name    = "${var.environment}-${var.smf_service_name}-vendor-api-5xx-error"
  type    = "log alert"
  message = "[${var.environment}] Increased 5xx API errors for {{@vendorPath.name}} endpoint. Notify: ${var.notification_endpoints}"

  query = "logs(\"@aws.awslogs.logGroup:\\\"/aws/apigateway/prod-fan-response-api\\\" @vendorPath:(${join(" OR ", var.api_endpoints_to_monitor )}) @status:[500 TO 599]\").index(\"*\").rollup(\"count\").by(\"@vendorPath\").last(\"5m\") > 5"

  monitor_thresholds {
    critical = 5
    warning = 1
    critical_recovery = 4
    warning_recovery = 0
  }

  notify_no_data      = false
  notify_audit        = false
  renotify_interval   = 60
  timeout_h           = 1
  require_full_window = false
  renotify_statuses   = ["alert"]
  tags                = local.datadog_tags
}

resource "datadog_monitor" "vendor_4xx_errors_monitor" {
  count   = 1
  name    = "${var.environment}-${var.smf_service_name}-vendor-api-4xx-error"
  type    = "log alert"
  message = "[${var.environment}] Increased 4xx API errors for {{@vendorPath.name}} endpoint. Notify: ${var.notification_endpoints}"

  query = "logs(\"@aws.awslogs.logGroup:\\\"/aws/apigateway/prod-fan-response-api\\\" @vendorPath:(${join(" OR ", var.api_endpoints_to_monitor )}) @status:[400 TO 499]\").index(\"*\").rollup(\"count\").by(\"@vendorPath\").last(\"5m\") > 15"
  monitor_thresholds {
    critical          = 15
    critical_recovery = 10
  }

  notify_no_data      = false
  notify_audit        = false
  renotify_interval   = 60
  timeout_h           = 1
  require_full_window = false
  renotify_statuses   = ["alert"]
  tags                = local.datadog_tags
}
