module "sqs_sync_products_queue" {
  source = "git@github.com:theorchard/terraform-sqs.git?ref=2.4.1"

  environment        = var.environment
  application_family = var.application_family
  queue_name         = var.sqs_sync_products_queue_name

  sqs_delay_seconds = 0

  sqs_max_message_size           = 524288
  sqs_fifo_queue                 = "true"
  sqs_visibility_timeout_seconds = 900

  sqs_deadletter_enabled       = true
  deadletter_max_message_size  = 524288
  deadletter_max_receive_count = 10

  # 14 days
  deadletter_message_retention_seconds = 1209600
}

resource "datadog_monitor" "sqs_sync_products_queue_monitor" {
  name    = "${var.environment}-${var.sqs_sync_products_queue_monitor_name}"
  type    = "metric alert"
  message = <<-EOT
  **Alert: High SQS Queue Depth**

  Queue has too many messages (>300). Check if ar-release-writer service is running.

  **Runbook:** https://www.notion.so/Orchard-Data-Sync-Workflow-1bd97177520f807f975cf5f993ded1ce

  ${var.notification_endpoints}
EOT

  query = "avg(last_1h):aws.sqs.approximate_number_of_messages_visible{queuename:${var.environment}-${var.sqs_sync_products_queue_name}-fifo-queue.fifo} > 300"

  monitor_thresholds {
    critical = 300
  }

  renotify_interval   = 60    // minutes
  require_full_window = false // DD recommends setting to false for sparse metrics

  tags = [
    "environment:${var.environment}",
    "service:${var.ar_release_writer_lambda_name}",
    "team:${var.team_name}",
  ]
}

resource "datadog_monitor" "sqs_sync_products_dlq_monitor" {
  name    = "${var.environment}-${var.sqs_sync_products_dlq_monitor_name}"
  type    = "metric alert"
  message = "Msgs on DLQ. First try a redrive. See https://www.notion.so/Orchard-Data-Sync-Workflow-1bd97177520f807f975cf5f993ded1ce Notify: ${var.DLQ_notification_endpoints}"

  query = "max(last_5m):aws.sqs.approximate_number_of_messages_visible{queuename:${var.environment}-${var.sqs_sync_products_queue_name}-fifo-deadletter.fifo} >= 10"

  monitor_thresholds {
    critical = 10
  }

  renotify_interval   = 60    // minutes
  require_full_window = false // DD recommends setting to false for sparse metrics

  tags = [
    "environment:${var.environment}",
    "service:${var.ar_release_writer_lambda_name}",
    "team:${var.team_name}",
  ]
}

module "sqs_sync_tracks_queue" {
  source = "git@github.com:theorchard/terraform-sqs.git?ref=2.4.1"

  environment        = var.environment
  application_family = var.application_family
  queue_name         = var.sqs_sync_tracks_queue_name

  sqs_delay_seconds = 0

  sqs_max_message_size           = 262144
  sqs_fifo_queue                 = "true"
  sqs_visibility_timeout_seconds = 900

  sqs_deadletter_enabled       = true
  deadletter_max_message_size  = 262144
  deadletter_max_receive_count = 10

  # 14 days
  deadletter_message_retention_seconds = 1209600
}

resource "datadog_monitor" "sqs_sync_tracks_queue_monitor" {
  name    = "${var.environment}-${var.sqs_sync_tracks_queue_monitor_name}"
  type    = "metric alert"
  message = "Too many msgs on queue. Is the ar-track-updater running? See https://www.notion.so/Orchard-Data-Sync-Workflow-1bd97177520f807f975cf5f993ded1ce Notify: ${var.notification_endpoints}"

  query = "avg(last_1h):aws.sqs.approximate_number_of_messages_visible{queuename:${var.environment}-${var.sqs_sync_tracks_queue_name}-fifo-queue.fifo} > 300"

  monitor_thresholds {
    critical = 300
  }

  renotify_interval   = 60    // minutes
  require_full_window = false // DD recommends setting to false for sparse metrics

  tags = [
    "environment:${var.environment}",
    "service:${var.ar_track_updater_lambda_name}",
    "team:${var.team_name}",
  ]
}

resource "datadog_monitor" "sqs_sync_tracks_dlq_monitor" {
  name    = "${var.environment}-${var.sqs_sync_tracks_dlq_monitor_name}"
  type    = "metric alert"
  message = "Msgs on DLQ. First try a redrive. See https://www.notion.so/Orchard-Data-Sync-Workflow-1bd97177520f807f975cf5f993ded1ce Notify: ${var.DLQ_notification_endpoints}"

  query = "max(last_5m):aws.sqs.approximate_number_of_messages_visible{queuename:${var.environment}-${var.sqs_sync_tracks_queue_name}-fifo-deadletter.fifo} >= 10"

  monitor_thresholds {
    critical = 10
  }

  renotify_interval   = 60    // minutes
  require_full_window = false // DD recommends setting to false for sparse metrics

  tags = [
    "environment:${var.environment}",
    "service:${var.ar_track_updater_lambda_name}",
    "team:${var.team_name}",
  ]
}

module "sqs_sync_rights_queue" {
  source = "git@github.com:theorchard/terraform-sqs.git?ref=2.4.1"

  environment        = var.environment
  application_family = var.application_family
  queue_name         = var.sqs_sync_rights_queue_name

  sqs_delay_seconds = 0

  sqs_max_message_size           = 262144
  sqs_fifo_queue                 = "true"
  sqs_visibility_timeout_seconds = 30

  sqs_deadletter_enabled       = true
  deadletter_max_message_size  = 262144
  deadletter_max_receive_count = 10

  # 14 days
  deadletter_message_retention_seconds = 1209600
}

resource "datadog_monitor" "sqs_sync_rights_queue_monitor" {
  name    = "${var.environment}-${var.sqs_sync_rights_queue_monitor_name}"
  type    = "metric alert"
  message = <<-EOT
  **Alert: High SQS Queue Depth**

  Queue has too many messages (>300). Check if ar-rules-writer service is running.

  **Runbook:** https://www.notion.so/Orchard-Data-Sync-Workflow-1bd97177520f807f975cf5f993ded1ce

  ${var.notification_endpoints}
EOT

  query = "avg(last_1h):aws.sqs.approximate_number_of_messages_visible{queuename:${var.environment}-${var.sqs_sync_rights_queue_name}-fifo-queue.fifo} > 300"

  monitor_thresholds {
    critical = 300
    warning  = 150
  }

  renotify_interval   = 60    // minutes
  require_full_window = false // DD recommends setting to false for sparse metrics

  tags = [
    "environment:${var.environment}",
    "service:${var.ar_rules_writer_lambda_name}",
    "team:${var.team_name}",
  ]
}

resource "datadog_monitor" "sqs_sync_rights_dlq_monitor" {
  name    = "${var.environment}-${var.sqs_sync_rights_dlq_monitor_name}"
  type    = "metric alert"
  message = "Msgs on DLQ. First try a redrive. See https://www.notion.so/Orchard-Data-Sync-Workflow-1bd97177520f807f975cf5f993ded1ce Notify: ${var.DLQ_notification_endpoints}"

  query = "max(last_5m):aws.sqs.approximate_number_of_messages_visible{queuename:${var.environment}-${var.sqs_sync_rights_queue_name}-fifo-deadletter.fifo} >= 10"

  monitor_thresholds {
    critical = 10
  }

  renotify_interval   = 60    // minutes
  require_full_window = false // DD recommends setting to false for sparse metrics

  tags = [
    "environment:${var.environment}",
    "service:${var.ar_rules_writer_lambda_name}",
    "team:${var.team_name}",
  ]
}



module "sqs_filter_products_queue" {
  source = "git@github.com:theorchard/terraform-sqs.git?ref=2.4.1"

  environment        = var.environment
  application_family = var.application_family
  queue_name         = var.sqs_filter_products_queue_name

  sqs_delay_seconds = 0

  sqs_max_message_size           = 262144
  sqs_fifo_queue                 = "true"
  sqs_visibility_timeout_seconds = 120

  sqs_deadletter_enabled       = true
  deadletter_max_message_size  = 262144
  deadletter_max_receive_count = 10

  # 14 days
  deadletter_message_retention_seconds = 1209600
}

resource "datadog_monitor" "sqs_filter_products_queue_monitor" {
  name    = "${var.environment}-${var.sqs_filter_products_queue_monitor_name}"
  type    = "metric alert"
  message = <<-EOT
  **Alert: High SQS Queue Depth**

  Queue has too many messages (>300). Check if ar-release-filter service is running.

  **Runbook:** https://www.notion.so/Orchard-Data-Sync-Workflow-1bd97177520f807f975cf5f993ded1ce

  ${var.notification_endpoints}
EOT

  query = "avg(last_1h):aws.sqs.approximate_number_of_messages_visible{queuename:${var.environment}-${var.sqs_filter_products_queue_name}-fifo-queue.fifo} > 300"

  monitor_thresholds {
    critical = 300
    warning  = 150
  }

  renotify_interval   = 60    // minutes
  require_full_window = false // DD recommends setting to false for sparse metrics

  tags = [
    "environment:${var.environment}",
    "service:${var.ar_release_filter_lambda_name}",
    "team:${var.team_name}",
  ]
}

resource "datadog_monitor" "sqs_filter_products_dlq_monitor" {
  name    = "${var.environment}-${var.sqs_filter_products_dlq_monitor_name}"
  type    = "metric alert"
  message = "Msgs on DLQ. First try a redrive. See https://www.notion.so/Orchard-Data-Sync-Workflow-1bd97177520f807f975cf5f993ded1ce Notify: ${var.DLQ_notification_endpoints}"

  query = "max(last_5m):aws.sqs.approximate_number_of_messages_visible{queuename:${var.environment}-${var.sqs_filter_products_queue_name}-fifo-deadletter.fifo} >= 10"

  monitor_thresholds {
    critical = 10
  }

  renotify_interval   = 60    // minutes
  require_full_window = false // DD recommends setting to false for sparse metrics

  tags = [
    "environment:${var.environment}",
    "service:${var.ar_release_filter_lambda_name}",
    "team:${var.team_name}",
  ]
}

module "sqs_product_transfer_queue" {
  source = "git@github.com:theorchard/terraform-sqs.git?ref=2.4.1"

  environment        = var.environment
  application_family = var.application_family
  queue_name         = var.sqs_product_transfer_queue_name

  sqs_delay_seconds = 0

  sqs_max_message_size           = 262144
  sqs_fifo_queue                 = "true"
  sqs_visibility_timeout_seconds = 900

  sqs_deadletter_enabled       = true
  deadletter_max_message_size  = 262144
  deadletter_max_receive_count = 10

  # 14 days
  deadletter_message_retention_seconds = 1209600
}

resource "datadog_monitor" "sqs_product_transfer_queue_monitor" {
  name    = "${var.environment}-${var.sqs_product_transfer_queue_monitor_name}"
  type    = "metric alert"
  message = <<-EOT
  **Alert: High SQS Queue Depth**

  Queue has too many messages (>30). Check if ar-rules-writer service is running.

  **Runbook:** https://www.notion.so/Orchard-Data-Sync-Workflow-1bd97177520f807f975cf5f993ded1ce

  ${var.notification_endpoints}
EOT

  query = "avg(last_1h):aws.sqs.approximate_number_of_messages_visible{queuename:${var.environment}-${var.sqs_product_transfer_queue_name}-fifo-queue.fifo} > 30"

  monitor_thresholds {
    critical = 30
    warning  = 15
  }

  renotify_interval   = 60    // minutes
  require_full_window = false // DD recommends setting to false for sparse metrics

  tags = [
    "environment:${var.environment}",
    "service:${var.ar_rules_writer_lambda_name}",
    "team:${var.team_name}",
  ]
}

resource "datadog_monitor" "sqs_product_transfer_dlq_monitor" {
  name    = "${var.environment}-${var.sqs_product_transfer_dlq_monitor_name}"
  type    = "metric alert"
  message = "Msgs on DLQ. First try a redrive. See https://www.notion.so/Orchard-Data-Sync-Workflow-1bd97177520f807f975cf5f993ded1ce Notify: ${var.DLQ_notification_endpoints}"

  query = "max(last_5m):aws.sqs.approximate_number_of_messages_visible{queuename:${var.environment}-${var.sqs_product_transfer_queue_name}-fifo-deadletter.fifo} >= 5"

  monitor_thresholds {
    critical = 5
  }

  renotify_interval   = 60    // minutes
  require_full_window = false // DD recommends setting to false for sparse metrics

  tags = [
    "environment:${var.environment}",
    "service:${var.ar_rules_writer_lambda_name}",
    "team:${var.team_name}",
  ]
}
