
data "aws_secretsmanager_secret" "datadog_api" {
  name = "${var.environment}/datadog/DD_API_KEY"
}

data "aws_secretsmanager_secret_version" "datadog_api" {
  secret_id = data.aws_secretsmanager_secret.datadog_api.id
}

data "aws_secretsmanager_secret" "datadog_app_key" {
  name = "${var.environment}/datadog/DD_APP_KEY"
}

data "aws_secretsmanager_secret_version" "datadog_app_key" {
  secret_id = data.aws_secretsmanager_secret.datadog_app_key.id
}

# Datadog provider
provider "datadog" {
  api_key = data.aws_secretsmanager_secret_version.datadog_api.secret_string
  app_key = data.aws_secretsmanager_secret_version.datadog_app_key.secret_string
}

resource "datadog_monitor" "kafka_connector_errors_monitor" {
  count   = var.datadog_monitor_enabled ? 1 : 0
  name    = "${var.environment}-${var.service_name}-sforce-sink-error-monitor"
  type    = "log alert"
  message = "[${var.environment}] SalesForce Sink Kafka Connector error. Notify: ${var.notification_endpoints}"

  query = "logs(\"source:${var.environment}-${var.service_name}-sforce-sink (\"*ERROR*\" OR \"*EXCEPTION*\")\").index(\"*\").rollup(\"count\").last(\"5m\") >= ${var.datadog_monitor_threshold}"

  monitor_thresholds {
    critical = var.datadog_monitor_threshold
  }

  enable_logs_sample  = true
  notify_no_data      = false
  notify_audit        = false
  renotify_interval   = 60
  timeout_h           = 0
  require_full_window = false

  tags = [
    "environment:${var.environment}",
    "service_name:${var.service_name}-sforce-sink",
    "application_family:${var.application_family}",
    "team:accounts-platform",
  ]
}

resource "datadog_monitor" "kafka_connector_dlq_monitor" {
  count   = var.datadog_monitor_enabled ? 1 : 0
  name    = "${var.environment}-${var.service_name}-sforce-sink-dlq-monitor"
  type    = "metric alert"
  message = "[${var.environment}] SalesForce Sink Connector sent a message into DLQ topic ${var.dlq_topic_name}. Notify: ${var.notification_endpoints}"

  query = "max(last_1m):round(avg:aws.kafka.messages_in_per_sec{cluster_name:${var.msk_cluster_name},topic:${lower(var.dlq_topic_name)}}) > 0"

  monitor_thresholds {
    critical = 0
  }

  notify_no_data      = false
  notify_audit        = false
  renotify_interval   = 60
  timeout_h           = 0
  require_full_window = false

  tags = [
    "environment:${var.environment}",
    "service_name:${var.service_name}-sforce-sink",
    "application_family:${var.application_family}",
    "team:accounts-platform",
  ]
}
