dda-backup/src/dda/backup/monitoring/domain.clj

45 lines
No EOL
1.5 KiB
Clojure

(ns dda.backup.monitoring.domain
(:require
[dda.backup.restic.domain :as rd]
[orchestra.core :refer [defn-spec]]
[clojure.spec.alpha :as s]))
(s/def ::type #{"gauge"})
(s/def ::labels map?)
(s/def ::metric-value pos?)
(s/def ::metric-element (s/keys :req-un [::labels ::metric-value]))
(s/def ::value (s/+ ::metric-element))
(s/def ::metric (s/keys :req-un [::type
::value]))
(s/def ::backup-size (s/spec ::metric-value))
(s/def ::docstring string?)
(s/def ::__name__ string?)
(s/def ::baseLabels (s/keys :req-un [::__name__]))
(s/def ::monitoring-data (s/keys :req-un [::baseLabels
::docstring
::metric]))
(s/def ::monitoring-data-seq (s/+ ::monitoring-data))
(s/def ::fqdn string?)
(s/def ::monitoring-config
(s/keys :req-un [::fqdn
::backup-size
::rd/restic-repository
::rd/backup-path]))
(defn-spec monitoring-data ::monitoring-data-seq
[config ::monitoring-config]
(let [{:keys [fqdn backup-size restic-repository backup-path]} config]
[{:baseLabels {:__name__ "backup_size"},
:docstring "Backup size in MB",
:metric {:type "gauge",
:value [{:labels
{:app_name "c4k-forgejo"
:fqdn fqdn
:restic_repo (str restic-repository "/" backup-path)},
:value backup-size}]}}]))