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 = 30

  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_dlq_monitor" {
  name    = "${var.environment}-${var.sqs_sync_products_dlq_monitor_name}"
  type    = "metric alert"
  message = "NR SQS sync products DLQ monitor triggered. Notify: ${var.slack_alert_channel}"

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

  monitor_thresholds {
    critical = 1
  }

  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}",
  ]
}

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 = 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_tracks_dlq_monitor" {
  name    = "${var.environment}-${var.sqs_sync_tracks_dlq_monitor_name}"
  type    = "metric alert"
  message = "NR SQS sync tracks DLQ monitor triggered. Notify: ${var.slack_alert_channel}"

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

  monitor_thresholds {
    critical = 1
  }

  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}",
  ]
}

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_dlq_monitor" {
  name    = "${var.environment}-${var.sqs_sync_rights_dlq_monitor_name}"
  type    = "metric alert"
  message = "NR SQS sync rights DLQ monitor triggered. Notify: ${var.slack_alert_channel}"

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

  monitor_thresholds {
    critical = 1
  }

  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}",
  ]
}

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 // It has to be the same with the lambda maximum timeout

  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_dlq_monitor" {
  name    = "${var.environment}-${var.sqs_filter_products_dlq_monitor_name}"
  type    = "metric alert"
  message = "Unprocessable msg rejected by release filter. DLQ alert triggered. Notify: ${var.slack_alert_channel}"

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

  monitor_thresholds {
    critical = 1
  }

  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}",
  ]
}

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_dlq_monitor" {
  name    = "${var.environment}-${var.sqs_product_transfer_dlq_monitor_name}"
  type    = "metric alert"
  message = "NR SQS product transfer DLQ monitor triggered. Notify: ${var.slack_alert_channel}"

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

  monitor_thresholds {
    critical = 1
  }

  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}",
  ]
}
