# Datadog configs for creating custom monitors
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
}

module "datadog_close_batch_lambda" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.12.0"

  environment                       = var.environment
  service_name                      = "lambda-${var.lambda_close_batch_name}"
  lambda_invocation_monitor_enabled = false
  lambda_error_monitor_enabled      = true
  notification_endpoints            = var.notification_endpoints
}

module "datadog_find_batch_to_close_lambda" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.12.0"

  environment                       = var.environment
  service_name                      = "lambda-${var.lambda_find_batch_to_close_name}"
  lambda_invocation_monitor_enabled = false
  lambda_error_monitor_enabled      = true
  notification_endpoints            = var.notification_endpoints
}

module "datadog_ready_deliveries_lambda" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.12.0"

  environment                       = var.environment
  service_name                      = "${var.service_name}-${var.lambda_ready_deliveries_name}"
  lambda_invocation_monitor_enabled = false
  lambda_error_monitor_enabled      = true
  notification_endpoints            = var.notification_endpoints
}

module "datadog_ready_deliveries_manager_lambda" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.12.0"

  environment                       = var.environment
  service_name                      = "${var.service_name}-${var.lambda_ready_deliveries_manager_name}"
  lambda_invocation_monitor_enabled = false
  lambda_error_monitor_enabled      = true
  notification_endpoints            = var.notification_endpoints
}

module "datadog_ar_to_ddb_sync_lambda" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.12.0"

  environment                       = var.environment
  service_name                      = "${var.service_name}-${var.lambda_ar_to_ddb_sync_name}"
  lambda_invocation_monitor_enabled = false
  lambda_error_monitor_enabled      = true
  notification_endpoints            = var.notification_endpoints
}

module "datadog_lambda_throttler" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.12.0"

  environment                       = var.environment
  service_name                      = "${var.service_name}-throttler"
  lambda_invocation_monitor_enabled = false
  lambda_error_monitor_enabled      = true
  notification_endpoints            = var.notification_endpoints
}

module "datadog_lambda_auto_metadata_update" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.12.0"

  environment                       = var.environment
  service_name                      = "${var.service_name}-auto-metadata-update"
  lambda_invocation_monitor_enabled = false
  lambda_error_monitor_enabled      = true
  notification_endpoints            = var.notification_endpoints
}

module "datadog_lambda_job_priority_rule_match" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.12.0"

  environment                       = var.environment
  service_name                      = "${var.service_name}-job-priority-rule-match"
  lambda_invocation_monitor_enabled = false
  lambda_error_monitor_enabled      = true
  notification_endpoints            = var.notification_endpoints
}

module "datadog_lambda_ddb_streams_handler" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.12.0"

  environment                       = var.environment
  service_name                      = "${var.service_name}-ddb-streams-handler"
  lambda_invocation_monitor_enabled = false
  lambda_error_monitor_enabled      = true
  notification_endpoints            = var.notification_endpoints
}

module "datadog_lambda_save_to_dd_db" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.12.0"

  environment                       = var.environment
  service_name                      = "${var.service_name}-save-to-dd-db"
  lambda_invocation_monitor_enabled = false
  lambda_error_monitor_enabled      = true
  notification_endpoints            = var.notification_endpoints
}

module "datadog_lambda_queue_tagger" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.12.0"

  environment                       = var.environment
  service_name                      = "${var.service_name}-${var.lambda_queue_tagger_name}"
  lambda_invocation_monitor_enabled = false
  lambda_error_monitor_enabled      = true
  notification_endpoints            = var.notification_endpoints
}

resource "datadog_monitor" "batch_to_close_dlq_monitor" {
  name    = "${var.environment}-batch-to-close-deadletter-monitor"
  type    = "metric alert"
  message = "[${var.environment}] batch_to_close-deadletter SQS has messages are not being processed. Notify: ${var.notification_endpoints}"
  query   = "sum(last_1h):sum:aws.sqs.number_of_messages_sent{queuename:${var.environment}-batch_to_close-deadletter}.as_count() > 10"

  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}",
    "application_family:${var.application_family}",
    "terraformed: true",
  ]
}
