-
Notifications
You must be signed in to change notification settings - Fork 160
/
dev.clj
94 lines (82 loc) · 4.25 KB
/
dev.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
(ns dev
"Internal development namespace for Crux. For end-user usage, see
examples.clj"
(:require [crux.api :as crux]
[clojure.tools.namespace.repl :as ctn]
[integrant.core :as i]
[integrant.repl.state :refer [system]]
[integrant.repl :as ir :refer [clear go suspend resume halt reset reset-all]]
[crux.io :as cio]
[crux.lucene]
[crux.kafka :as k]
[crux.kafka.embedded :as ek]
[crux.rocksdb :as rocks]
[clojure.java.io :as io]
[crux.system :as sys])
(:import (crux.api ICruxAPI)
(java.io Closeable File)
java.nio.file.attribute.FileAttribute
java.nio.file.Files
[ch.qos.logback.classic Level Logger]
org.slf4j.LoggerFactory))
(defn set-log-level! [ns level]
(.setLevel ^Logger (LoggerFactory/getLogger (name ns))
(when level
(Level/valueOf (name level)))))
(defn get-log-level! [ns]
(some->> (.getLevel ^Logger (LoggerFactory/getLogger (name ns)))
(str)
(.toLowerCase)
(keyword)))
(defmacro with-log-level [ns level & body]
`(let [level# (get-log-level! ~ns)]
(try
(set-log-level! ~ns ~level)
~@body
(finally
(set-log-level! ~ns level#)))))
(def dev-node-dir
(io/file "dev/dev-node"))
(defmethod i/init-key ::crux [_ {:keys [node-opts]}]
(crux/start-node node-opts))
(defmethod i/halt-key! ::crux [_ ^ICruxAPI node]
(.close node))
(def standalone-config
{::crux {:node-opts {:crux/index-store {:kv-store {:crux/module `rocks/->kv-store,
:db-dir (io/file dev-node-dir "indexes"),
:block-cache :crux.rocksdb/block-cache}}
:crux/document-store {:kv-store {:crux/module `rocks/->kv-store,
:db-dir (io/file dev-node-dir "documents")
:block-cache :crux.rocksdb/block-cache}}
:crux/tx-log {:kv-store {:crux/module `rocks/->kv-store,
:db-dir (io/file dev-node-dir "tx-log")
:block-cache :crux.rocksdb/block-cache}}
:crux.rocksdb/block-cache {:crux/module `rocks/->lru-block-cache
:cache-size (* 128 1024 1024)}
:crux.metrics.jmx/reporter {}
:crux.http-server/server {}
:crux.lucene/lucene-store {:db-dir (io/file dev-node-dir "lucene")}}}})
(defmethod i/init-key ::embedded-kafka [_ {:keys [kafka-port kafka-dir]}]
(ek/start-embedded-kafka #::ek{:zookeeper-data-dir (io/file kafka-dir "zk-data")
:zookeeper-port (cio/free-port)
:kafka-log-dir (io/file kafka-dir "kafka-log")
:kafka-port kafka-port}))
(defmethod i/halt-key! ::embedded-kafka [_ ^Closeable embedded-kafka]
(.close embedded-kafka))
(def embedded-kafka-config
(let [kafka-port (cio/free-port)]
{::embedded-kafka {:kafka-port kafka-port
:kafka-dir (io/file dev-node-dir "kafka")}
::crux {:ek (i/ref ::embedded-kafka)
:node-opts {::k/kafka-config {:bootstrap-servers (str "http://localhost:" kafka-port)}
:crux/index-store {:kv-store {:crux/module `rocks/->kv-store
:db-dir (io/file dev-node-dir "ek-indexes")}}
:crux/document-store {:crux/module `k/->document-store,
:kafka-config ::k/kafka-config
:local-document-store {:kv-store {:crux/module `rocks/->kv-store,
:db-dir (io/file dev-node-dir "ek-documents")}}}
:crux/tx-log {:crux/module `k/->tx-log, :kafka-config ::k/kafka-config}}}}))
;; swap for `embedded-kafka-config` to use embedded-kafka
(ir/set-prep! (fn [] standalone-config))
(defn crux-node []
(::crux system))