# Monitor for Backup Jobs Completed
resource "datadog_monitor" "backup_jobs_completed_monitor" {
  name               = "Backup Jobs Completed Monitor"
  type               = "metric alert"
  message            = "Backup jobs successfully completed for vault ${var.backup_vault_name} in the last 24 hours. Notify: ${var.notification_endpoints}"
  escalation_message = "Backup jobs are not completing for vault ${var.backup_vault_name}. Immediate attention required."

  query = "sum(last_24h):sum:aws.backup.number_of_backup_jobs_completed{backupvaultname:${var.backup_vault_name}} < ${var.critical_threshold}"

  no_data_timeframe   = 2880   #The number of minutes before a monitor will notify when data stops reporting
  notify_no_data      = true
  renotify_interval   = 60
  evaluation_delay    = 86400  # Delay evaluation to avoid false positives
  require_full_window = true   # Ensures the entire 24-hour period is evaluated
}

# Monitor for Backup Jobs Created
resource "datadog_monitor" "backup_jobs_created_monitor" {
  name    = "Backup Jobs Created Monitor"
  type    = "metric alert"
  message = "Backup jobs successfully created for vault ${var.backup_vault_name} in the last 24 hours. Notify: ${var.notification_endpoints}"

  query = "sum(last_24h):sum:aws.backup.number_of_backup_jobs_created{backupvaultname:${var.backup_vault_name}} < ${var.critical_threshold}"

  no_data_timeframe   = 2880   #The number of minutes before a monitor will notify when data stops reporting
  notify_no_data      = true
  renotify_interval   = 60
  evaluation_delay    = 86400  # Delay evaluation to avoid false positives
  require_full_window = true   # Ensures the entire 24-hour period is evaluated
}

# Dashboard for Backup Monitoring
resource "datadog_dashboard" "backup_dashboard" {
  count = var.dashboard_enabled ? 1 : 0

  title       = "${var.backup_vault_name} Backup Dashboard"
  description = "Dashboard for monitoring ${var.backup_vault_name}"
  layout_type = "ordered"

  widget {
    timeseries_definition {
      title = "Backup Jobs Completed in Last 24 Hours"
      request {
        q = "sum:aws.backup.number_of_backup_jobs_completed{backupvaultname:${var.backup_vault_name}}.rollup(sum, 86400)"
      }
    }
  }

  widget {
    timeseries_definition {
      title = "Backup Jobs Created in Last 24 Hours"
      request {
        q = "sum:aws.backup.number_of_backup_jobs_created{backupvaultname:${var.backup_vault_name}}.rollup(sum, 86400)"
      }
    }
  }

  widget {
    timeseries_definition {
      title = "Backup Job Failures"
      request {
        q = "sum:aws.backup.number_of_backup_jobs_failed{backupvaultname:${var.backup_vault_name}}.rollup(sum, 86400)"
      }
    }
  }

  widget {
    timeseries_definition {
      title = "Backup Recovery Points Issues"
      request {
        q = "sum:aws.backup.number_of_recovery_points_expired{backupvaultname:${var.backup_vault_name}}.rollup(sum, 86400)"
      }
    }
  }

  widget {
    timeseries_definition {
      title = "Pending Backup Jobs"
      request {
        q = "sum:aws.backup.number_of_backup_jobs_pending{backupvaultname:${var.backup_vault_name}}.rollup(sum, 86400)"
      }
    }
  }

  widget {
    timeseries_definition {
      title = "Failed Copy Jobs"
      request {
        q = "sum:aws.backup.number_of_copy_jobs_failed{backupvaultname:${var.backup_vault_name}}.rollup(sum, 86400)"
      }
    }
  }

  widget {
    timeseries_definition {
      title = "Created Copy Jobs"
      request {
        q = "sum:aws.backup.number_of_copy_jobs_created{backupvaultname:${var.backup_vault_name}}.rollup(sum, 86400)"
      }
    }
  }
}
