
locals {
    contract_lifecycle_automation_lambda_name = "${var.service_name}-contract-lifecycle-automation"
}

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" "contract_lifecycle_automation_invocation_monitor" {
    count   = 1 # set to 0 to disable the monitor
    name    = "${var.environment}-${local.contract_lifecycle_automation_lambda_name}-invocation-monitor"
    type    = "metric alert"
    message = "The contract lifecycle automation lambda did not trigger at 12AM UTC. Notify: ${var.notification_endpoints}"

    query = "sum(last_1500m):default(sum:aws.lambda.invocations{environment:${var.environment},service_name:${local.contract_lifecycle_automation_lambda_name}}.as_count().rollup(sum, daily, 12am), 0) <= ${var.datadog_invocation_error_monitor_threshold}"

    monitor_thresholds {
        critical = var.datadog_invocation_error_monitor_threshold
        critical_recovery = var.datadog_invocation_recovery_monitor_threshold
    }

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

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