
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" "gda_signup_api_gateway_p90_monitor" {
  name    = "${var.environment}-${var.service_name}-p90-monitor"
  type    = "metric alert"
  message = "[${var.environment}] GDA-Signup API Gateway p90 latency is above 3sec. Notify: ${var.datadog_notification_endpoints}"

  query = "avg(last_5m):avg:aws.apigateway.latency.p90{apiid:${aws_apigatewayv2_api.gda_signup_api.id}} > ${var.datadog_p90_monitor_threshold}"

  monitor_thresholds {
    critical = var.datadog_p90_monitor_threshold
  }

  notify_no_data      = false
  notify_audit        = false
  renotify_interval   = 0
  timeout_h           = 0
  require_full_window = false
  evaluation_delay    = 900

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

resource "datadog_monitor" "gda_signup_api_gateway_error_monitor" {
  name    = "${var.environment}-${var.service_name}-error-monitor"
  type    = "metric alert"
  message = "[${var.environment}] GDA-Signup API Gateway error rate is high. Notify: ${var.datadog_notification_endpoints}"

  query = "sum(last_5m):( sum:aws.apigateway.5xx{apiid:${aws_apigatewayv2_api.gda_signup_api.id}}.as_count() ) / sum:aws.apigateway.count{apiid:${aws_apigatewayv2_api.gda_signup_api.id}}.as_count() > ${var.datadog_error_monitor_threshold}"

  monitor_thresholds {
    critical = var.datadog_error_monitor_threshold
  }

  notify_no_data      = false
  notify_audit        = false
  renotify_interval   = 0
  timeout_h           = 0
  require_full_window = false
  evaluation_delay    = 900

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

resource "datadog_monitor" "gda_signup_api_gateway_401_log_monitor" {
  name    = "${var.environment}-${var.service_name}-log-monitor"
  type    = "log alert"
  message = "More than ${var.datadog_log_monitor_threshold} unauthorized requests to GDA-Signup API Gateway. Notify: ${var.datadog_notification_endpoints}"

  query = "logs(\"@aws.awslogs.logGroup:\"/aws/apigateway/${var.environment}-${var.service_name}\" @status:401\").index(\"*\").rollup(\"count\").last(\"5m\") > ${var.datadog_log_monitor_threshold}"

  monitor_thresholds {
    critical = var.datadog_log_monitor_threshold
  }

  notify_no_data      = false
  notify_audit        = false
  renotify_interval   = 0
  timeout_h           = 0
  require_full_window = false

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