provider "aws" {
  region = var.aws_region
}

terraform {
  backend "s3" {
    bucket  = "orcd-terraform-state"
    key     = "prod/maxwells/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

data "aws_caller_identity" "current" {
}

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
}

# Monitor for Maxwells Kinesis Producer Library
resource "datadog_monitor" "maxwell_metrics_monitor" {
  name               = "${var.environment}-maxwells-kinesis-producer-monitor"
  type               = "query alert"
  message            = "Maxwells kinesis producer alarm triggered. Notify: ${var.notification_endpoints}"
  escalation_message = "Maxwells is still not producing kinesis records. Escalation to ${var.escalation_notification_endpoints}"

  query = "avg(last_15m):avg:kinesisproducerlibrary.KinesisRecordsDataPut{streamname:${var.environment}*} by {streamname} < ${var.critical_threshold_number}"

  monitor_thresholds {
    critical = var.critical_threshold_number
  }

  include_tags        = true
  new_group_delay     = 60
  notify_no_data      = true
  no_data_timeframe   = 240
  notify_audit        = false
  renotify_interval   = 60
  timeout_h           = 0
  require_full_window = false
  renotify_statuses   = [
    "alert",
    "no data",
  ]

  tags = [
    "environment:${var.environment}",
    "service_name:maxwell",
  ]
}

# Monitor for Maxwells Failed Messages
resource "datadog_monitor" "maxwell_failed_messages_monitor" {
  name               = "${var.environment}-maxwells-failed-messages-monitor"
  type               = "query alert"
  message            = "Maxwells failed messages alarm triggered. Notify: ${var.notification_endpoints}"
  escalation_message = "Maxwells is reporting failed messages. Escalation to ${var.escalation_notification_endpoints}"

  query = "avg(last_5m):avg:MaxwellMetrics.messages.failed.meter.1MinuteRate{env:${var.environment}} > 0"

  monitor_thresholds {
    critical = 0
  }

  include_tags        = true
  notify_no_data      = true
  no_data_timeframe   = 10
  notify_audit        = false
  renotify_interval   = 60
  timeout_h           = 0
  require_full_window = false
  renotify_statuses   = [
    "alert",
    "no data",
  ]

  tags = [
    "environment:${var.environment}",
    "service_name:maxwell",
  ]
}
