# =====================================================================
# Monitoring per CloudNativePG (CNPG)
#
# Applica con: kubectl apply -f 02-cnpg-monitoring.yaml
#
# Prerequisiti:
# - CNPG operator già installato (namespace tipico: cnpg-system)
# - kube-prometheus-stack già installato nel namespace "monitoring"
#   con podMonitorSelectorNilUsesHelmValues: false (vedi file 01),
#   così Prometheus scopre PodMonitor in TUTTI i namespace.
# =====================================================================

# ---------------------------------------------------------------------
# 1) PodMonitor per l'operatore CNPG stesso
#    (metriche interne: reconcile loop, controller-runtime, porta 8080)
# ---------------------------------------------------------------------
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: cnpg-operator
  namespace: cnpg-system
  labels:
    release: kube-prometheus-stack
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: cloudnative-pg
  podMetricsEndpoints:
    - port: metrics
      interval: 30s

---
# ---------------------------------------------------------------------
# 2) PodMonitor generico per TUTTI i cluster Postgres gestiti da CNPG
#
#    Nota: se preferisci il metodo "automatico" (enablePodMonitor: true
#    nella risorsa Cluster), questo PodMonitor manuale NON serve per
#    quel cluster specifico — ma il manuale è consigliato dalla doc
#    ufficiale CNPG perché dà controllo esplicito sul lifecycle,
#    indipendente dal singolo Cluster CR.
#
#    Il selettore usa la label standard "cnpg.io/cluster" che CNPG
#    applica automaticamente a tutti i pod di ogni cluster gestito,
#    quindi UN SOLO PodMonitor copre TUTTI i cluster Postgres presenti
#    nel namespace target (adatta matchExpressions se i tuoi cluster
#    vivono in namespace diversi: serve un PodMonitor per namespace,
#    oppure passa a un selector cross-namespace via namespaceSelector).
# ---------------------------------------------------------------------
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: cnpg-clusters
  namespace: monitoring
  labels:
    release: kube-prometheus-stack
spec:
  namespaceSelector:
    any: true   # scropa i pod CNPG in QUALSIASI namespace
  selector:
    matchExpressions:
      - key: cnpg.io/cluster
        operator: Exists
  podMetricsEndpoints:
    - port: metrics       # exporter per-istanza, porta 9187
      interval: 30s
      scrapeTimeout: 10s
      path: /metrics

---
# ---------------------------------------------------------------------
# 3) Import automatico dashboard CNPG ufficiale (grafana.com ID 20417)
#    tramite sidecar dashboards di Grafana (già incluso nel chart
#    kube-prometheus-stack). Basta un ConfigMap con la label
#    "grafana_dashboard: '1'" nel namespace di Grafana.
#
#    In alternativa più semplice: Grafana UI -> Dashboards -> Import
#    -> inserisci ID 20417 -> seleziona datasource Prometheus.
# ---------------------------------------------------------------------
apiVersion: v1
kind: ConfigMap
metadata:
  name: cnpg-grafana-dashboard
  namespace: monitoring
  labels:
    grafana_dashboard: "1"
data:
  cnpg-dashboard.json: |
    {
      "annotations": {"list": []},
      "title": "CloudNativePG (import via ID 20417)",
      "__inputs": [],
      "__requires": [],
      "schemaVersion": 39,
      "panels": [],
      "_comment": "Placeholder: sostituisci con l'export JSON completo scaricato da https://grafana.com/grafana/dashboards/20417 per avere la dashboard reale, oppure importa manualmente da Grafana UI usando l'ID."
    }
