From 3b240bea933b31e00ab36e692cc235d0d3308226 Mon Sep 17 00:00:00 2001
From: Michael Jerger <michael.jerger@meissa-gmbh.de>
Date: Tue, 11 Mar 2025 16:20:10 +0100
Subject: [PATCH] fix monitoring labels

---
 src/dda/backup/monitoring.clj              | 36 +++++++++++++++++++---
 src/dda/backup/monitoring/domain.clj       |  2 +-
 test/dda/backup/monitoring/domain_test.clj |  2 +-
 3 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/src/dda/backup/monitoring.clj b/src/dda/backup/monitoring.clj
index fb5700e..264158b 100644
--- a/src/dda/backup/monitoring.clj
+++ b/src/dda/backup/monitoring.clj
@@ -1,23 +1,49 @@
 (ns dda.backup.monitoring
   (:require
-    [orchestra.core :refer [defn-spec]]
-    [dda.backup.monitoring.domain :as domain]
-    [dda.backup.infrastructure :as i]))
+   [orchestra.core :refer [defn-spec]]
+   [clojure.spec.alpha :as s]
+   [dda.backup.monitoring.domain :as domain]
+   [dda.backup.infrastructure :as i]))
 
 (def default {:url "http://prometheus-pushgateway.monitoring.svc.cluster.local:9091/metrics/job"
               :namespace "default"
               :metrics {:kube_job_status_active 0
-                        :kube_job_status_failed 1
+                        :kube_job_status_failed 0
                         :kube_job_status_succeeded 0}})
 
+(s/def ::config (s/keys :req-un [::name]
+                        :opt-un [::url ::metrics ::namespace]))
+
 (defn- config-w-defaults
   [config]
     (merge default config))
 
 (defn-spec send-metrics! nil?
-  [config ::domain/config]
+  [config ::config]
   (let [config-2-use (config-w-defaults config)
         {:keys [url name]} config-2-use]
     (try 
       (i/post! (str url "/" name) (domain/collect-metrics config-2-use))
       (catch Exception e (println (str "Warn: unable to send log" (.getMessage e)))))))
+
+(defn-spec backup-start-metrics! nil?
+  [config ::config]
+  (send-metrics!
+   {:name "backup"
+    :metrics {:kube_job_status_active 1
+              :kube_job_status_start_time (long (/ (System/currentTimeMillis) 1000))}}))
+
+(defn-spec backup-success-metrics! nil?
+  [config ::config]
+  (send-metrics!
+   {:name "backup"
+    :metrics {:kube_job_status_succeeded 1
+              :kube_job_status_completion_time (long (/ (System/currentTimeMillis) 1000))}}))
+
+(defn-spec backup-fail-metrics! nil?
+  [config ::config]
+  (send-metrics!
+   {:name "backup"
+    :metrics {:kube_job_status_failed 1
+              :kube_job_status_completion_time (long (/ (System/currentTimeMillis) 1000))}}))
+
diff --git a/src/dda/backup/monitoring/domain.clj b/src/dda/backup/monitoring/domain.clj
index da18be5..605243a 100644
--- a/src/dda/backup/monitoring/domain.clj
+++ b/src/dda/backup/monitoring/domain.clj
@@ -17,7 +17,7 @@
     (str
      (->> metrics
           (map (fn [entry] (str (name (key entry))
-                                "{namespace=" namespace "}" " "
+                                "{namespace=\"" namespace "\"}" " "
                                 (val entry))))
           (st/join "\n"))
      "\n")))
\ No newline at end of file
diff --git a/test/dda/backup/monitoring/domain_test.clj b/test/dda/backup/monitoring/domain_test.clj
index 1ff2e94..8b34730 100644
--- a/test/dda/backup/monitoring/domain_test.clj
+++ b/test/dda/backup/monitoring/domain_test.clj
@@ -12,7 +12,7 @@
                                :name "name"
                                :namespace "default"
                                :metrics {}})))
-  (is (= "metric1{namespace=default} 1\nmetric2{namespace=default} text\n"
+  (is (= "metric1{namespace=\"default\"} 1\nmetric2{namespace=\"default\"} text\n"
          (cut/collect-metrics {:url "url"
                                :name "name"
                                :namespace "default"