(ns auto-ap.jobs.core
  (:require [auto-ap.utils :refer [heartbeat]]
            [mount.core :as mount]
            [auto-ap.datomic :refer [conn ]]
            [auto-ap.logging :as alog]
            [nrepl.server :refer [start-server]]
            [auto-ap.background.metrics :refer [metrics-setup container-tags container-data logging-context]]
            [com.brunobonacci.mulog :as mu]))

(defn execute [name f]
  (mu/with-context {:background-job name
                    :source name
                    :service        name}
    (mu/trace ::execute-background-job
              []
              (try 
                (mount/start (mount/only #{#'conn  #'metrics-setup #'container-tags #'logging-context #'container-data }))
                (start-server :port 9000 :bind "0.0.0.0" #_#_:handler (cider-nrepl-handler))
                ((heartbeat f name))
                (alog/info ::stopping :job name)
                (Thread/sleep 15000)
                (mount/stop)
                (catch Exception e
                  (alog/error ::job-error :error e)
                  (throw e))
                (finally
                  (System/exit 0))))))
