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

  service_name       = var.lambda_service_name
  environment        = var.environment
  teams              = [var.kdh_team_tag]

  # Monitors
  notification_endpoints            = var.notification_endpoints
  escalation_notification_endpoints = var.notification_endpoints

  lambda_throttle_monitor_enabled          = true
  lambda_throttle_critical_number          = 2800
  lambda_throttle_warning_number           = 2100
  lambda_throttle_warning_recovery_number  = null
  lambda_throttle_critical_recovery_number = null

  lambda_error_monitor_enabled          = true
  lambda_error_critical_number          = 90
  lambda_error_warning_number           = 80
  lambda_error_warning_recovery_number  = null
  lambda_error_critical_recovery_number = null
}

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" "lambda_iterator_age_monitor" {
  name    = "[Art Relations to Neo4j Sync] Lambda iterator_age monitor (${var.environment}-${var.lambda_service_name})"
  type    = "query alert"
  message = "Monitor triggered. Notify: @slack-kafka-data-highway-alerts"

  query = "avg(last_30m):avg:aws.lambda.iterator_age.maximum{functionname:${var.environment}-${var.lambda_service_name}} >= 3600000"

  monitor_thresholds {
    ok       = 0
    critical = 3600000 # 60m
    warning  = 2460000 # 41m
  }

  include_tags        = true
  notify_no_data      = false
  notify_audit        = false
  priority            = 2
  renotify_interval   = 180 # 3 hrs
  timeout_h           = 1   # automatically resolves from a triggered state if there is no data for 1 hr
  require_full_window = false
  no_data_timeframe   = 0

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