{{ define "alloy.config.profilesJava" }}
{{- if .Values.profiles.java.enabled }}
// Profiles: Java
discovery.kubernetes "java_pods" {
  selectors {
    role = "pod"
    field = "spec.nodeName=" + env("HOSTNAME")
  }
{{- if .Values.profiles.java.namespaces }}
  namespaces {
    names = {{ .Values.profiles.java.namespaces | toJson }}
  }
{{- end }}
  role = "pod"
}

discovery.process "java_pods" {
  join = discovery.kubernetes.java_pods.targets
}

discovery.relabel "java_pods" {
  targets = discovery.process.java_pods.targets
  rule {
    source_labels = ["__meta_kubernetes_pod_phase"]
    regex = "Succeeded|Failed|Completed"
    action = "drop"
  }
  rule {
    source_labels = ["__meta_kubernetes_pod_name"]
    regex = "^$"
    action = "drop"
  }
  rule {
    source_labels = ["__meta_process_exe"]
    action = "keep"
    regex = ".*/java$"
  }
  rule {
    source_labels = ["__meta_kubernetes_namespace"]
    action = "replace"
    target_label = "namespace"
  }
  rule {
    source_labels = ["__meta_kubernetes_pod_name"]
    action = "replace"
    target_label = "pod"
  }
  rule {
    source_labels = ["__meta_kubernetes_pod_node_name"]
    action = "replace"
    target_label = "node"
  }
  rule {
    source_labels = ["__meta_kubernetes_pod_container_name"]
    action = "replace"
    target_label = "container"
  }
{{- if .Values.profiles.java.extraRelabelingRules }}
{{ .Values.profiles.java.extraRelabelingRules | indent 2 }}
{{- end }}
}

pyroscope.java "java_pods" {
  targets = discovery.relabel.java_pods.output
  profiling_config {
    interval = {{ .Values.profiles.java.profilingConfig.interval | quote }}
    alloc = {{ .Values.profiles.java.profilingConfig.alloc | quote }}
    cpu = {{ .Values.profiles.java.profilingConfig.cpu }}
    sample_rate = {{ .Values.profiles.java.profilingConfig.sampleRate }}
    lock = {{ .Values.profiles.java.profilingConfig.lock | quote }}
  }
  forward_to = [pyroscope.write.profiles_service.receiver]
}
{{- end }}
{{- end }}
