module "o11y_cluster" {
  source              = "../../../modules/o11y_cluster"
  env                 = var.env
  logical_region_name = var.logical_region_name
  cloud_provider      = "aws"
  cloud_region        = var.aws_region
  vector_role_arn     = module.iam-vector-agent.role_arn

  providers = {
    aws.kv_bucket = aws.tf_state
  }
}

locals {
  log_bucket_name       = module.o11y_cluster.storage_info.logs.bucketName
  assume_o11y_role      = module.o11y_cluster.agent_info.roleARN
  endpoint_service_name = module.o11y_cluster.monitor_info.endpointServiceName
  endpoint_dns_name     = module.o11y_cluster.monitor_info.dnsName
}

resource "aws_security_group" "o11y-metrics" {
  name        = "${var.env}-seed-o11y-metrics-sg"
  description = "Security group for o11y agent"
  vpc_id      = module.vpc.vpc_id
  tags = {
    Name                        = "${var.env}-seed-o11y-metrics-sg"
    tidbcloud-auto-deploy-owner = local.eks.name
  }

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = [var.vpc.cidr]
  }
}

resource "aws_vpc_endpoint" "o11y" {
  service_name        = local.endpoint_service_name
  vpc_endpoint_type   = "Interface"
  private_dns_enabled = true
  vpc_id              = module.vpc.vpc_id
  subnet_ids          = [module.vpc.private_subnets[index(module.vpc.azs, var.availability_zones[0])]]
  security_group_ids  = [aws_security_group.o11y-metrics.id]
  tags = {
    tidbcloud-auto-deploy-owner = local.eks.name
  }
}

module "o11y-agent" {
  source = "../../../modules/app"

  kubeconfig_path = module.kubeconfig.path
  workflow        = "deploy-new-region-next-gen-o11y-agent.yaml"
  parameters = {
    env               = var.env
    logicalRegionName = var.logical_region_name
    cluster           = module.argocd_cluster.name
    region            = var.aws_region
    cloud             = "aws"
    additionalArgs = jsonencode({
      vectorRoleARN              = module.iam-vector-agent.role_arn
      assumeO11yRole             = local.assume_o11y_role
      logBucketName              = local.log_bucket_name
      imageRegistry              = "${local.seed_account}.dkr.ecr.us-west-2.amazonaws.com"
      tenantId                   = "infra-${var.env}"
      projectId                  = "seed"
      o11yId                     = module.o11y_cluster.o11y_cluster_id
      clusterName                = local.eks.name
      o11yEndpointServiceDNSName = local.endpoint_dns_name
    })
  }
  services = [
    {
      name      = "sts/vmagent-${var.env}-seed-${var.logical_region_name}-o11y"
      namespace = "monitoring"
      wait_for  = "jsonpath='{.status.availableReplicas}'=REPLICAS"
    }
  ]
}
