{{- define "alloy.config.alloy.allowList" -}}
up
{{- if .Values.metrics.alloy.metricsTuning.useDefaultAllowList -}}
|{{- join "|" ("default_allow_lists/alloy.yaml" | .Files.Get | fromYamlArray) -}}
{{- end -}}

{{- if .Values.metrics.alloy.metricsTuning.useIntegrationAllowList -}}
  |{{- join "|" ("default_allow_lists/alloy_integration.yaml" | .Files.Get | fromYamlArray) -}}
{{- end -}}

{{- if .Values.metrics.alloy.metricsTuning.includeMetrics -}}
  |{{- join "|" (.Values.metrics.alloy.metricsTuning.includeMetrics) -}}
{{- end -}}

{{- end -}}

{{ define "alloy.config.alloy" }}
// Grafana Alloy
discovery.relabel "alloy" {
  targets = discovery.kubernetes.pods.targets
  {{- range $k, $v := .Values.metrics.alloy.labelMatchers }}
  rule {
    source_labels = ["__meta_kubernetes_pod_label_{{ include "escape_label" $k }}"]
    regex = "{{ $v }}"
    action = "keep"
  }
  {{- end }}
  rule {
    source_labels = ["__meta_kubernetes_pod_container_port_name"]
    regex = "http-metrics"
    action = "keep"
  }
  rule {
    source_labels = ["__meta_kubernetes_namespace"]
    target_label  = "namespace"
  }
  rule {
    source_labels = ["__meta_kubernetes_pod_name"]
    target_label  = "pod"
  }
  rule {
    source_labels = ["__meta_kubernetes_pod_container_name"]
    target_label  = "container"
  }
{{- if .Values.metrics.extraRelabelingRules }}
{{ .Values.metrics.extraRelabelingRules | indent 2 }}
{{- end }}
{{- if .Values.metrics.alloy.extraRelabelingRules }}
{{ .Values.metrics.alloy.extraRelabelingRules | indent 2 }}
{{- end }}
}

prometheus.scrape "alloy" {
  job_name = "integrations/alloy"
  targets = discovery.relabel.alloy.output
  scrape_interval = {{ .Values.metrics.alloy.scrapeInterval | default .Values.metrics.scrapeInterval | quote }}
  forward_to = [prometheus.relabel.alloy.receiver]
{{- if .Values.alloy.alloy.clustering.enabled }}
  clustering {
    enabled = true
  }
{{- end }}
}

prometheus.relabel "alloy" {
  max_cache_size = {{ .Values.metrics.alloy.maxCacheSize | default .Values.metrics.maxCacheSize | int }}
{{- if or .Values.metrics.alloy.metricsTuning.useDefaultAllowList .Values.metrics.alloy.metricsTuning.includeMetrics }}
  rule {
    source_labels = ["__name__"]
    regex = "{{- (include "alloy.config.alloy.allowList" .) -}}"
    action = "keep"
  }
{{- end }}
{{- if .Values.metrics.alloy.metricsTuning.excludeMetrics }}
  rule {
    source_labels = ["__name__"]
    regex = {{ join "|" .Values.metrics.alloy.metricsTuning.excludeMetrics | quote }}
    action = "drop"
  }
{{- end }}
{{- if .Values.metrics.extraMetricRelabelingRules }}
{{ .Values.metrics.extraMetricRelabelingRules | indent 2 }}
{{- end }}
{{- if .Values.metrics.alloy.extraMetricRelabelingRules }}
{{ .Values.metrics.alloy.extraMetricRelabelingRules | indent 2 }}
{{- end }}
  forward_to = [prometheus.relabel.metrics_service.receiver]
}
{{ end }}
