(ns auto-ap.server (:gen-class) #_{:clj-kondo/ignore [:unused-namespace]} (:require auto-ap.background.invoices [auto-ap.background.requests :as requests] [auto-ap.background.sysco :as sysco] [auto-ap.background.vendor :as vendor] [auto-ap.datomic.migrate :as migrate] [auto-ap.graphql.clients :as gq-clients] [auto-ap.handler :refer [app]] [auto-ap.import.intuit :as intuit] [auto-ap.import.plaid :as plaid] [auto-ap.import.yodlee2 :as yodlee2] [auto-ap.ledger :as ledger] [auto-ap.square.core :as square] [auto-ap.background.metrics :as metrics] [auto-ap.background.mail :as mail] [clojure.tools.logging :as log] [config.core :refer [env]] [mount.core :as mount] [nrepl.server :refer [start-server]] [ring.adapter.jetty :refer [run-jetty]] [yang.scheduler :as scheduler] [com.unbounce.dogstatsd.core :as statsd]) (:import [org.eclipse.jetty.server.handler.gzip GzipHandler] [org.eclipse.jetty.server.handler StatisticsHandler])) (defn add-shutdown-hook! [^Runnable f] (.addShutdownHook (Runtime/getRuntime) (Thread. f))) (defn gzip-handler [] (doto (GzipHandler.) (.setIncludedMimeTypes (into-array ["text/css" "text/plain" "text/javascript" "text/csv" "text/html" "text/html;charset=utf-8" "application/javascript" "application/csv" "application/edn" "application/json" "image/svg+xml"])) (.setMinGzipSize 1024))) (defn configure-jetty [server] (let [stats-handler (StatisticsHandler.) gzip-handler (gzip-handler) default-handler (.getHandler server)] (.setHandler gzip-handler default-handler) (.setHandler stats-handler gzip-handler) (.setHandler server stats-handler)) (.setStopAtShutdown server true)) (mount/defstate port :start (Integer/parseInt (or (env :port) "3000"))) (mount/defstate jetty :start (run-jetty app {:port port :join? false :configurator configure-jetty}) :stop (.stop jetty)) (defn collect-jetty-stats [] (try (statsd/gauge "requests.active" (double (.getRequestsActive (.getHandler jetty)))) (statsd/gauge "requests.1xx" (double (.getResponses1xx (.getHandler jetty)))) (statsd/gauge "requests.2xx" (double (.getResponses2xx (.getHandler jetty)))) (statsd/gauge "requests.3xx" (double (.getResponses3xx (.getHandler jetty)))) (statsd/gauge "requests.4xx" (double (.getResponses4xx (.getHandler jetty)))) (statsd/gauge "requests.5xx" (double (.getResponses5xx (.getHandler jetty)))) (.statsReset (.getHandler jetty)) (catch Exception e (log/warn e)))) (mount/defstate jetty-stats :start (scheduler/every (* 1000 10) collect-jetty-stats) :stop (scheduler/stop jetty-stats)) (defn shutdown-mount [] (mount/stop)) (defn -main [& _] (let [without (cond-> [] (not (env :run-web? )) (into [#'jetty #'jetty-stats]) (not (env :run-background?)) (into [#'square/square-loader #'vendor/refresh-vendor-usages-worker #'ledger/touch-broken-ledger-worker #'mail/import-invoices #'ledger/process-txes-worker #'ledger/ledger-reconciliation-worker #'requests/request-listener #'sysco/sysco-invoice-importer #'auto-ap.background.invoices/close-auto-invoices-worker #'gq-clients/current-balance-worker #'yodlee2/import-worker #'yodlee2/account-worker #'intuit/import-worker #'intuit/account-worker #'plaid/import-worker #'migrate/migrate-start]))] (log/info "starting without " without) (add-shutdown-hook! shutdown-mount) (start-server :port 9000 :bind "0.0.0.0" #_#_:handler (cider-nrepl-handler)) #_(alter-var-root #'nrepl.middleware.print/*print-fn* (constantly clojure.pprint/pprint)) (apply mount/start-without without))) (comment )