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

  service_name = var.lambda_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          = 1400
  lambda_throttle_warning_number           = 1280
  lambda_throttle_warning_recovery_number  = null
  lambda_throttle_critical_recovery_number = null

  lambda_error_monitor_enabled          = true
  lambda_error_critical_number          = 200
  lambda_error_warning_number           = 150
  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
}

# project move error monitor
resource "datadog_monitor" "project_move_error_monitor" {
  name    = "[${upper(var.environment)}] ${var.lambda_name} project move error monitor"
  type    = "log alert"
  message = "[${upper(var.environment)}] ${var.lambda_name} project move failure. Notify: ${var.notification_endpoints}"

  query = "logs(\"service:${var.lambda_name} env:${var.environment} (\\\"Failed to move project dependencies\\\" OR \\\"Unexpected error during the move project\\\") \").index(\"*\").rollup(\"count\").last(\"5m\") > 0"

  monitor_thresholds {
    critical = 0
  }

  enable_logs_sample  = true
  include_tags        = true
  notify_no_data      = true
  notify_audit        = false
  renotify_interval   = 15
  timeout_h           = 0
  require_full_window = true

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

# Lambda iterator_age monitor
resource "datadog_monitor" "lambda_iterator_age_monitor" {
  name    = "[Art Relations to Neo4j Sync] Lambda iterator_age monitor (${var.environment}-${var.lambda_name})"
  type    = "query alert"
  message = "Monitor triggered for {{value}}. Notify: @slack-kafka-data-highway-alerts"

  query = "avg(last_15m):avg:aws.lambda.iterator_age.maximum{functionname:prod-lambda-kinesis-to-neo4j} >= 1320000"

  monitor_thresholds {
    ok       = 0
    warning  = 1020000  # 17 mins
    critical = 1320000 # 22 mins
  }

  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_name}",
    "application_family:${var.application_family}",
    "team:${var.kdh_team_tag}",
  ]
}
