{{ define "alloy.config.pod_monitors" }}
// Prometheus Operator PodMonitor objects
prometheus.operator.podmonitors "pod_monitors" {
{{- if .Values.metrics.podMonitors.namespaces }}
  namespaces = {{ .Values.metrics.podMonitors.namespaces | toJson }}
{{- end }}
{{- if .Values.metrics.podMonitors.selector }}
  selector {
{{ .Values.metrics.podMonitors.selector | indent 4 }}
  }
{{- end }}
{{- if .Values.alloy.alloy.clustering.enabled }}
  clustering {
    enabled = true
  }
{{- end }}
  scrape {
    default_scrape_interval = {{ .Values.metrics.podMonitors.scrapeInterval | default .Values.metrics.scrapeInterval | quote }}
  }
  forward_to = [prometheus.relabel.podmonitors.receiver]

{{- if .Values.metrics.extraRelabelingRules }}
{{ .Values.metrics.extraRelabelingRules | indent 2 }}
{{- end }}
{{- if .Values.metrics.podMonitors.extraRelabelingRules }}
{{ .Values.metrics.podMonitors.extraRelabelingRules | indent 2 }}
{{- end }}
}

prometheus.relabel "podmonitors" {
  max_cache_size = {{ .Values.metrics.podMonitors.maxCacheSize | default .Values.metrics.maxCacheSize | int }}
{{- if .Values.metrics.extraMetricRelabelingRules }}
{{ .Values.metrics.extraMetricRelabelingRules | indent 2 }}
{{- end }}
{{- if .Values.metrics.podMonitors.extraMetricRelabelingRules }}
{{ .Values.metrics.podMonitors.extraMetricRelabelingRules | indent 2 }}
{{- end }}
  forward_to = [prometheus.relabel.metrics_service.receiver]
}
{{ end }}

{{ define "alloy.config.probes" }}
// Prometheus Operator Probe objects
prometheus.operator.probes "probes" {
{{- if .Values.metrics.probes.namespaces }}
  namespaces = {{ .Values.metrics.probes.namespaces | toJson }}
{{- end }}
{{- if .Values.metrics.probes.selector }}
  selector {
{{ .Values.metrics.probes.selector | indent 4 }}
  }
{{- end }}
{{- if .Values.alloy.alloy.clustering.enabled }}
  clustering {
    enabled = true
  }
{{- end }}
  scrape {
    default_scrape_interval = {{ .Values.metrics.probes.scrapeInterval | default .Values.metrics.scrapeInterval | quote }}
  }
  forward_to = [prometheus.relabel.probes.receiver]

{{- if .Values.metrics.extraRelabelingRules }}
{{ .Values.metrics.extraRelabelingRules | indent 2 }}
{{- end }}
{{- if .Values.metrics.probes.extraRelabelingRules }}
{{ .Values.metrics.probes.extraRelabelingRules | indent 2 }}
{{- end }}
}

prometheus.relabel "probes" {
  max_cache_size = {{ .Values.metrics.probes.maxCacheSize | default .Values.metrics.maxCacheSize | int }}
{{- if .Values.metrics.extraMetricRelabelingRules }}
{{ .Values.metrics.extraMetricRelabelingRules | indent 2 }}
{{- end }}
{{- if .Values.metrics.probes.extraMetricRelabelingRules }}
{{ .Values.metrics.probes.extraMetricRelabelingRules | indent 2 }}
{{- end }}
  forward_to = [prometheus.relabel.metrics_service.receiver]
}
{{ end }}

{{ define "alloy.config.service_monitors" }}
// Prometheus Operator ServiceMonitor objects
prometheus.operator.servicemonitors "service_monitors" {
{{- if .Values.metrics.serviceMonitors.namespaces }}
  namespaces = {{ .Values.metrics.serviceMonitors.namespaces | toJson }}
{{- end }}
{{- if .Values.metrics.serviceMonitors.selector }}
  selector {
{{ .Values.metrics.serviceMonitors.selector | indent 4 }}
  }
{{- end }}
{{- if .Values.alloy.alloy.clustering.enabled }}
  clustering {
    enabled = true
  }
{{- end }}
  scrape {
    default_scrape_interval = {{ .Values.metrics.serviceMonitors.scrapeInterval | default .Values.metrics.scrapeInterval | quote }}
  }
  forward_to = [prometheus.relabel.servicemonitors.receiver]

{{- if .Values.metrics.extraRelabelingRules }}
{{ .Values.metrics.extraRelabelingRules | indent 2 }}
{{- end }}
{{- if .Values.metrics.serviceMonitors.extraRelabelingRules }}
{{ .Values.metrics.serviceMonitors.extraRelabelingRules | indent 2 }}
{{- end }}
}

prometheus.relabel "servicemonitors" {
  max_cache_size = {{ .Values.metrics.serviceMonitors.maxCacheSize | default .Values.metrics.maxCacheSize | int }}
{{- if .Values.metrics.extraMetricRelabelingRules }}
{{ .Values.metrics.extraMetricRelabelingRules | indent 2 }}
{{- end }}
{{- if .Values.metrics.serviceMonitors.extraMetricRelabelingRules }}
{{ .Values.metrics.serviceMonitors.extraMetricRelabelingRules | indent 2 }}
{{- end }}
  forward_to = [prometheus.relabel.metrics_service.receiver]
}
{{ end }}


{{ define "alloy.config.pod_log_objects" }}
// Grafana Alloy PodLogs objects
loki.source.podlogs "podlogs_objects" {
{{- if .Values.logs.podLogsObjects.namespaces }}
  namespace_selector {
    match_expression {
      key = "name"
      operator = "In"
      values = {{ .Values.logs.podLogsObjects.namespaces | toJson }}
    }
  }
{{- end }}
{{- if .Values.logs.podLogsObjects.selector }}
  selector {
{{ .Values.logs.podLogsObjects.selector | indent 4 }}
  }
{{- end }}
{{- if (index .Values "alloy-logs").alloy.clustering.enabled }}
  clustering {
    enabled = true
  }
{{- end }}
  forward_to = [loki.process.podlogs_objects.receiver]
}

loki.process "podlogs_objects" {
{{- if .Values.logs.podLogsObjects.extraStageBlocks }}
{{ tpl .Values.logs.podLogsObjects.extraStageBlocks $ | indent 2 }}
{{- end }}
  forward_to = [loki.process.logs_service.receiver]
}
{{ end }}
