{{- if and .Values.components.monitors.enabled (eq .Values.global.mode "regional") }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    {{- include "o11y-mixin.labels" . | nindent 4 }}
    release: self-monitoring
  name: self-monitoring-vmstorage
  namespace: {{ .Values.global.namespace }}
spec:
  endpoints:
  - port: http
    path: /metrics
  namespaceSelector:
    matchNames:
    - observability
  selector:
    matchLabels:
      app.kubernetes.io/instance: vmcluster
      app.kubernetes.io/name: vmstorage

---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    {{- include "o11y-mixin.labels" . | nindent 4 }}
    release: self-monitoring
  name: self-monitoring-vmselect
  namespace: {{ .Values.global.namespace }}
spec:
  endpoints:
  - port: http
    path: /metrics
  namespaceSelector:
    matchNames:
    - observability
  selector:
    matchLabels:
      app.kubernetes.io/instance: vmcluster
      app.kubernetes.io/name: vmselect

---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    {{- include "o11y-mixin.labels" . | nindent 4 }}
    release: self-monitoring
  name: self-monitoring-vminsert
  namespace: {{ .Values.global.namespace }}
spec:
  endpoints:
  - port: http
    path: /metrics
    metricRelabelings:
    - sourceLabels: [__name__, projectID]
      regex: "vm_tenant_inserted_rows_total;(0.+|[^0].*)"
      action: drop
  namespaceSelector:
    matchNames:
    - observability
  selector:
    matchLabels:
      app.kubernetes.io/instance: vmcluster
      app.kubernetes.io/name: vminsert

---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    {{- include "o11y-mixin.labels" . | nindent 4 }}
    release: self-monitoring
  name: self-monitoring-regionalserver
  namespace: {{ .Values.global.namespace }}
spec:
  endpoints:
  - port: metrics
    path: /metrics
  namespaceSelector:
    matchNames:
    - observability
  selector:
    matchLabels:
      app: regionalservice

---
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  labels:
    {{- include "o11y-mixin.labels" . | nindent 4 }}
    release: self-monitoring
  name: self-monitoring-user-prometheus
  namespace: {{ .Values.global.namespace }}
spec:
  podMetricsEndpoints:
  - port: web
    path: /metrics
    relabelings:
    - action: replace
      sourceLabels: [__meta_kubernetes_pod_label_observability_pingcap_com_applicationID]
      targetLabel: application
    - action: replace
      sourceLabels: [__meta_kubernetes_pod_label_observability_pingcap_com_cluster_id]
      targetLabel: cluster
    - action: replace
      sourceLabels: [__meta_kubernetes_pod_label_observability_pingcap_com_tenantID]
      targetLabel: tenant
  namespaceSelector:
    any: true
  selector:
    matchExpressions:
      - {key: observability.pingcap.com/applicationID, operator: Exists}
      - {key: observability.pingcap.com/tenantID, operator: Exists}

---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    {{- include "o11y-mixin.labels" . | nindent 4 }}
    release: self-monitoring
  name: self-monitoring-loki
  namespace: {{ .Values.global.namespace }}
spec:
  endpoints:
  - port: http-metrics
  namespaceSelector:
    matchNames:
    - observability
  selector:
    matchLabels:
      app.kubernetes.io/instance: loki-ha
      app.kubernetes.io/name: loki-ha
    matchExpressions:
    - key: prometheus.io/service-monitor
      operator: NotIn
      values:
      - "false"

---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    {{- include "o11y-mixin.labels" . | nindent 4 }}
    release: self-monitoring
  name: self-monitoring-vmalert
  namespace: {{ .Values.global.namespace }}
spec:
  endpoints:
  - port: http
  namespaceSelector:
    matchNames:
    - observability
  selector:
    matchLabels:
      app.kubernetes.io/name: vmalert
      app.kubernetes.io/instance: vmalert-shared

---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    {{- include "o11y-mixin.labels" . | nindent 4 }}
    release: self-monitoring
  name: self-monitoring-o11y-agent-control-server
  namespace: {{ .Values.global.namespace }}
spec:
  endpoints:
  - port: metrics
  namespaceSelector:
    matchNames:
    - observability
  selector:
    matchLabels:
      app.kubernetes.io/name: o11y-agent-control-server

---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    {{- include "o11y-mixin.labels" . | nindent 4 }}
    release: self-monitoring
  name: self-monitoring-vmalert-all
  namespace: {{ .Values.global.namespace }}
spec:
  endpoints:
  - port: http
  namespaceSelector:
    any: true
  selector:
    matchExpressions:
      - key: app.kubernetes.io/name
        operator: In
        values: [vmalert]
      - key: observability.pingcap.com/bizType
        operator: In
        values: [tidbcloud, prod-devtier]
      - key: observability.pingcap.com/applicationID
        operator: Exists

---
{{- if .Values.components.monitors.opsServer.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    {{- include "o11y-mixin.labels" . | nindent 4 }}
    release: self-monitoring
  name: self-monitoring-ops-server
  namespace: {{ .Values.global.namespace }}
spec:
  endpoints:
  - port: ops-metrics
    path: {{ .Values.components.monitors.opsServer.path }}
    interval: {{ .Values.components.monitors.opsServer.interval }}
    scrapeTimeout: {{ .Values.components.monitors.opsServer.scrapeTimeout }}
  - port: source-metrics
    path: {{ .Values.components.monitors.opsServer.path }}
    interval: {{ .Values.components.monitors.opsServer.interval }}
    scrapeTimeout: {{ .Values.components.monitors.opsServer.scrapeTimeout }}
  - port: helm-metrics
    path: {{ .Values.components.monitors.opsServer.path }}
    interval: {{ .Values.components.monitors.opsServer.interval }}
    scrapeTimeout: {{ .Values.components.monitors.opsServer.scrapeTimeout }}
  namespaceSelector:
    matchNames:
    - {{ .Values.components.monitors.opsServer.namespace }}
  selector:
    matchLabels:
      app.kubernetes.io/name: ops-server
      app.kubernetes.io/instance: {{ .Values.components.monitors.opsServer.serviceName }}
  {{- if .Values.components.monitors.opsServer.targetLabels }}
  targetLabels:
    {{- toYaml .Values.components.monitors.opsServer.targetLabels | nindent 4 }}
  {{- end }}
  {{- if .Values.components.monitors.opsServer.podTargetLabels }}
  podTargetLabels:
    {{- toYaml .Values.components.monitors.opsServer.podTargetLabels | nindent 4 }}
  {{- end }}
{{- end }}
{{- end }}
