Files
integreat/src/cljc/auto_ap/utils.cljc
2023-10-30 12:35:18 -07:00

84 lines
2.3 KiB
Clojure

(ns auto-ap.utils
#?@
(:clj
[(:require [com.unbounce.dogstatsd.core :as statsd]
[com.brunobonacci.mulog :as mu]
[auto-ap.logging :as alog])]))
#_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]}
(defn by
([f xs]
(by f identity xs))
([f fv xs]
(reduce
#(assoc %1 (f %2) (fv %2))
{}
xs)))
#_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]}
(defn replace-by [xs f x]
(let [found? (atom false)
replaced (mapv
(fn [t]
(if (= (f t) (f x))
(do (reset! found? true)
x)
t))
xs)]
(if @found?
replaced
(into [x] replaced))))
#_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]}
(defn dollars-0? [amt]
(< -0.001 amt 0.001))
#_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]}
(defn dollars= [amt1 amt2]
(dollars-0? (- amt1 amt2) ))
#_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]}
(defn deep-merge [v & vs]
(letfn [(rec-merge [v1 v2]
(if (and (map? v1) (map? v2))
(merge-with deep-merge v1 v2)
v2))]
(if (some identity vs)
(reduce #(rec-merge %1 %2) v vs)
(last vs))))
#_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]}
(def default-pagination-size 20)
#_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]}
(defn allow-once [f]
(let [in-progress? (atom false)]
(fn []
(when (= false @in-progress?)
(try
(reset! in-progress? true)
(f)
(finally
(reset! in-progress? false)))))))
#_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]}
(defn heartbeat [f id]
(fn []
#?(:clj (mu/with-context {:source id}
(try
(alog/info ::starting-process :id id)
(f)
(alog/info ::ending-process :id id)
(statsd/service-check {:name (str id)
:status :ok}
nil)
(catch Exception e
(alog/error ::process-failed :error e)
(statsd/service-check {:name (str id)
:status :critical}
nil))))
:cljs (do (println "Heartbeat for " id)
(f)))))