diff --git a/modules.edn b/modules.edn index 03575ac..8a93a8d 100644 --- a/modules.edn +++ b/modules.edn @@ -18,6 +18,9 @@ :kit/metrics {:path "metrics" :doc "adds support for metrics using prometheus through iapetos"} + :kit/quartz + {:path "quartz" + :doc "adds support for quartz scheduling"} :kit/sente {:path "sente" :doc "adds support for Sente websockets to cljs"} diff --git a/quartz/assets/src/quartz.clj b/quartz/assets/src/quartz.clj new file mode 100644 index 0000000..61dbab9 --- /dev/null +++ b/quartz/assets/src/quartz.clj @@ -0,0 +1,33 @@ +(ns <>.edge.scheduling.quartz + (:require + [aero.core :as aero] + [integrant.core :as ig] + [kit.ig-utils :as ig-utils] + [troy-west.cronut :as cronut])) + +(defmethod aero/reader 'cronut/trigger + [_ _ value] + (cronut/trigger-builder value)) + +(defmethod aero/reader 'cronut/cron + [_ _ value] + (cronut/shortcut-cron value)) + +(defmethod aero/reader 'cronut/interval + [_ _ value] + (cronut/shortcut-interval value)) + +(defmethod ig/suspend-key! :cronut/scheduler [_ _]) + +(defmethod ig/resume-key :cronut/scheduler + [key opts old-opts old-impl] + (ig-utils/resume-handler key opts old-opts old-impl)) + +;; Means of setting environment properties during runtime +;; Handy in case there's a scenario where you can't (for whatever reason) set +;; secrets in your JVM properties +(defmethod ig/init-key :scheduling.quartz/env-properties + [_ properties] + (doseq [[k v] properties] + (when (some? v) + (System/setProperty (name k) v)))) \ No newline at end of file diff --git a/quartz/config.edn b/quartz/config.edn new file mode 100644 index 0000000..0debc61 --- /dev/null +++ b/quartz/config.edn @@ -0,0 +1,11 @@ +{:default + {:require-restart? true + :actions + {:assets + [["assets/src/quartz.clj" "src/clj/<>/edge/scheduling/quartz.clj"]] + :injections + [{:type :edn + :path "deps.edn" + :target [:deps] + :action :merge + :value {com.troy-west/cronut {:mvn/version "0.2.6"}}}]}}} \ No newline at end of file