provider "aws" {
  region = var.region
}

# Terraform backends cannot contain interpolations
terraform {
  backend "s3" {
    bucket  = "orcd-terraform-state"
    key     = "prod/mobile/monitor/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

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 jenkins osx host disk space
resource "datadog_monitor" "jenkins_osx_disk_space_monitor" {
  name               = "${var.environment}-${var.service_name}-disk-space-monitor"
  type               = "query alert"
  message            = "Disk space is low on {{device.name}} on {{host.name}} in the ${var.environment}-${var.service_name} cluster. Notify: ${var.notification_endpoints}"
  escalation_message = "Escalation to ${var.escalation_notification_endpoints}"

  query = "avg(last_5m):avg:system.disk.used{host:prod-jenkins-osx-slave01} >= ${var.disk_space_critical_number}"

  monitor_thresholds {
    warning           = var.disk_space_warning_number
    warning_recovery  = var.disk_space_warning_recovery_number
    critical          = var.disk_space_critical_number
    critical_recovery = var.disk_space_critical_recovery_number
  }

  include_tags        = true
  locked              = true
  notify_no_data      = false
  notify_audit        = false
  renotify_interval   = 60
  timeout_h           = 0
  require_full_window = true

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