data "aws_caller_identity" "current" {}

# Datadog monitor
resource "datadog_monitor" "opensearch_5XX_monitor" {
  count = var.monitor_enabled ? 1 : 0
  name  = "${var.environment}-${var.service_name} OpenSearch 5XX Monitor"
  type  = "query alert"

  evaluation_delay    = var.evaluation_delay
  include_tags        = true
  notify_audit        = false
  notify_no_data      = false
  renotify_interval   = 60
  require_full_window = false

  message            = "Monitor triggered. Notify: ${var.notification_endpoints}"
  escalation_message = "Escalation to ${var.escalation_notification_endpoints}"

  query = "sum(${var.evaluation_period}):sum:aws.es.5xx{service_name:${var.service_name},environment:${var.environment}}.as_count() >= ${var.critical_number_5XX}"

  monitor_thresholds {
    critical = var.critical_number_5XX
  }

  tags = local.tags
}

# low disk space monitor
resource "datadog_monitor" "os_node_disk_space_monitor" {
  count = var.disk_space_monitor_enabled ? 1 : 0

  name               = "${var.environment}-${var.service_name} low disk space monitor"
  message            = "[${var.environment}]-${var.service_name} nodes low on disk space. It has {{value}} free space left. Notify: ${var.notification_endpoints}"
  escalation_message = "Escalation to ${var.escalation_notification_endpoints}"

  type  = "query alert"
  query = "avg(${var.disk_space_monitor_evaluation_period}):avg:aws.es.free_storage_space{domain:${var.environment}-${var.service_name}} < ${local.disk_space_monitor_mib_critical}"

  include_tags        = true
  notify_audit        = false
  notify_no_data      = false
  renotify_interval   = 60
  require_full_window = false
  evaluation_delay    = var.disk_space_monitor_evaluation_delay

  monitor_thresholds {
    critical = local.disk_space_monitor_mib_critical
  }

  tags = [
    "environment:${var.environment}",
    "service_name:${var.service_name}",
    "application_family:${var.application_family}",
    "terraformed:true",
  ]
}
