summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreltrac <hi@eltr.ac>2026-10-20 16:38:11 +0800
committereltrac <hi@eltr.ac>2026-10-21 10:18:00 +0800
commit4ab2ebf1f90170a8f9436f5260b4c740a447baf4 (patch)
tree50bf4de6ffaf62e3e85b2205f54536033d6e8709
parent5d44b728c4d9cbe2960a02f7059d32c8df426926 (diff)
core: add embeded nREPL server
-rw-r--r--resources/config.edn8
-rw-r--r--src/weepinbell/core.clj18
2 files changed, 20 insertions, 6 deletions
diff --git a/resources/config.edn b/resources/config.edn
index 85aa74b..180e6c1 100644
--- a/resources/config.edn
+++ b/resources/config.edn
@@ -29,4 +29,10 @@
;; For personal use, 1 would be enough. For large traffic, adjust accordingly
:pipeline-concurrency 5
;; Minimal log level. Set to `:debug` when debugging or submitting a bug.
- :log-level :info}
+ :log-level :info
+ ;; :nrepl-port is port number of the embedded nREPL server
+ ;; use nil to turn off nREPL feature; use an integer to enable nREPL
+ ;; e.g. `:nrepl-prot 7888` means an nREPL client can connect to weepinbell's
+ ;; nREPL server and evaluate Clojure code on the fly.
+ ;; WARNING: never expose nREPL server to the public network!
+ :nrepl-port nil}
diff --git a/src/weepinbell/core.clj b/src/weepinbell/core.clj
index 2435029..cb0033a 100644
--- a/src/weepinbell/core.clj
+++ b/src/weepinbell/core.clj
@@ -8,6 +8,7 @@
[weepinbell.storage.worker :as worker]
[clojure.core.async :refer [chan >!! <!!]]
[taoensso.timbre :as timbre]
+ [nrepl.server :as nrepl]
[weepinbell.migration :as m]
;; two main subsystems' facades
[weepinbell.processor.facade :refer [start-processor]]
@@ -58,21 +59,28 @@
(let [config-file (or (System/getenv "WEEPINBELL_CONFIG") "config.edn")
config (load-config config-file)
log-level (or (System/getenv "WEEPINBELL_LOGLEVEL")
- (:log-level config) :info)]
+ (:log-level config) :info)
+ nrepl-port (:nrepl-port config)]
(timbre/merge-config! {:min-level log-level})
- (timbre/info "starting weepinbell...")
+
(let [done-chan (chan 1)
- stop-system (start-system config)]
- ;; Register signal handlers for SIGINT and SIGTERM
+ stop-system (do (timbre/info "starting weepinbell...")
+ (start-system config))
+ nrepl-server (when nrepl-port
+ (timbre/info "starting nREPL server on port" nrepl-port)
+ (nrepl/start-server :port nrepl-port))]
+ ;; Register signal handlers for SIGINT and SIGTERM
(doseq [signal ["INT" "TERM"]]
(Signal/handle (Signal. signal)
(reify SignalHandler
(handle [_ sig]
(stop-system)
+ (when nrepl-server
+ (nrepl/stop-server nrepl-server))
(timbre/info "signal" (.getName sig) "received."
"gracefully shut down weepinbell.")
(>!! done-chan true)))))
- ;; block til signal received
+ ;; block til signal received
(<!! done-chan))))
(defn -main [& args]