45 lines
No EOL
1.5 KiB
Clojure
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}]}}])) |