data "aws_caller_identity" "current" {}

# Datadog Connector Dashboard
resource "datadog_dashboard" "kafka_connector_timeseries_dashboard" {
  count       = var.environment_type == "fargate" ? 1 : 0
  title       = "${var.environment}-${var.service_name} timeseries dashboard"
  description = "Default terraformed timeseries dashboard for ${var.environment}-${var.service_name}"
  layout_type = "ordered"

  template_variable {
    defaults = [var.environment]
    name     = var.service_name
    prefix   = "environment"
  }

  widget {
    timeseries_definition {
      title         = "Running and Pending Task Count"
      show_legend   = true
      legend_layout = "horizontal"

      request {
        q = "sum:aws.ecs.service.running{servicename:${var.environment}-${var.service_name}}"
        style {
          palette = "green"
        }
      }
      request {
        q = "sum:ecs.containerinsights.PendingTaskCount{servicename:${var.environment}-${var.service_name}}"
        style {
          palette = "warm"
        }
      }

      event {
        q = "@title:\"ECS Deployment on service ${var.environment}-${var.service_name}\""
      }
    }
  }

  widget {
    timeseries_definition {
      title       = "CPU Utilization"
      show_legend = true

      request {
        q = "max:aws.ecs.cpuutilization.maximum{servicename:${var.environment}-${var.service_name}}"
      }

      event {
        q = "@title:\"ECS Deployment on service ${var.environment}-${var.service_name}\""
      }
    }
  }

  widget {
    timeseries_definition {
      title       = "Memory Utilization"
      show_legend = true

      request {
        q = "max:aws.ecs.memory_utilization.maximum{servicename:${var.environment}-${var.service_name}}"
      }

      event {
       q = "@title:\"ECS Deployment on service ${var.environment}-${var.service_name}\""
      }
    }
  }

  widget {
    log_stream_definition {
      query = "source:${var.environment}-${var.service_name}"
      columns = [
        "source",
        "status",
      ]
      title               = "${var.environment}-${var.service_name} stdout logs"
      title_size          = 16
      title_align         = "left"
      show_date_column    = true
      show_message_column = true
    }
  }
  # JMX metrics for connector
  widget {
    group_definition {
      layout_type      = "ordered"
      show_title       = true
      title            = "JMX Metrics"
      background_color = "green"

      dynamic "widget" {
        for_each = local.jmx_widgets
        content {
          timeseries_definition {
            show_legend = widget.value.show_legend
            legend_layout = "horizontal"
            title = widget.value.title
            yaxis {
              include_zero = try(widget.value.yaxis_include_zero, true)
            }
            request {
              display_type = widget.value.display_type

              dynamic "formula" {
                for_each = widget.value.formulas
                content {
                  formula_expression = formula.value.formula_expression
                  style {
                    palette = formula.value.palette
                    palette_index = formula.value.palette_index
                  }
                  alias = formula.value.alias
                }
              } # end formulas

              dynamic "query" {
                for_each = widget.value.metric_queries
                content {
                  metric_query {
                    name  = query.value.name
                    query = query.value.query
                  }
                }
              } # end queries

            }# end request

            dynamic "event" {
                for_each = widget.value.event_query
                content {
                  q = event.value
                }
            } # end event

          } # end timeseries_definition
        }# end content
      } # end dynamic widget

    } # end group
  } # end JMX metrics main widget

  # Metrics for Kafka Topic
  widget {
    group_definition {
      layout_type = "ordered"
      show_title  = true
      title       = "Metrics for Kafka Topic"

      dynamic "widget" {
        for_each = local.combined_monitor_kafka_topics

        content {
          timeseries_definition {
            legend_columns = [
              "avg",
              "max",
              "min",
              "sum",
              "value",
            ]
            legend_layout = "auto"
            show_legend   = true
            title         = "Messages/sec in Topic: ${widget.value.alias}"
            title_align   = "left"
            title_size    = "16"

            request {
              display_type   = "line"
              on_right_yaxis = false

              formula {
                alias              = widget.value.alias
                formula_expression = "round(query1)"
              }
              query {
                metric_query {
                  data_source = "metrics"
                  name        = "query1"
                  query       = "max:aws.kafka.messages_in_per_sec{cluster_name:${widget.value.cluster},topic:${widget.value.topic}}"
                }
              }
              style {
                line_type  = "solid"
                line_width = "normal"
                palette    = "dog_classic"
              }
            }
          }
        }
      }

      dynamic "widget" {
        for_each = local.combined_monitor_kafka_topics
        content {
          timeseries_definition {
            legend_columns = [
              "avg",
              "max",
              "min",
              "sum",
              "value",
            ]
            legend_layout = "auto"
            show_legend   = true
            title         = "Max Offset Lag for Kafka topic: ${widget.value.alias}"
            title_align   = "left"
            title_size    = "16"

            request {
              display_type   = "line"
              on_right_yaxis = false

              formula {
                formula_expression = "query1"
              }
              query {
                metric_query {
                  data_source = "metrics"
                  name        = "query1"
                  query       = "max:aws.kafka.max_offset_lag{cluster_name:${widget.value.cluster},topic:${widget.value.topic}} by {consumer_group}"
                }
              }
              style {
                line_type  = "solid"
                line_width = "normal"
                palette    = "dog_classic"
              }
            }
          }
        }
      }

    }
  }

  tags = local.dashboard_tags
}
