Added Luminus app skeleton; added ADL.
This commit is contained in:
parent
8a923c1b33
commit
f3c0e728a4
52 changed files with 1761 additions and 0 deletions
77
env/dev/clj/pastoralist/core.clj
vendored
Normal file
77
env/dev/clj/pastoralist/core.clj
vendored
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
(ns pastoralist.core
|
||||
(:require
|
||||
[pastoralist.handler :as handler]
|
||||
[pastoralist.nrepl :as nrepl]
|
||||
[luminus.http-server :as http]
|
||||
[luminus-migrations.core :as migrations]
|
||||
[pastoralist.config :refer [env]]
|
||||
[clojure.tools.cli :refer [parse-opts]]
|
||||
[clojure.tools.logging :as log]
|
||||
[mount.core :as mount])
|
||||
(:gen-class))
|
||||
|
||||
;; log uncaught exceptions in threads
|
||||
(Thread/setDefaultUncaughtExceptionHandler
|
||||
(reify Thread$UncaughtExceptionHandler
|
||||
(uncaughtException [_ thread ex]
|
||||
(log/error {:what :uncaught-exception
|
||||
:exception ex
|
||||
:where (str "Uncaught exception on" (.getName thread))}))))
|
||||
|
||||
(def cli-options
|
||||
[["-p" "--port PORT" "Port number"
|
||||
:parse-fn #(Integer/parseInt %)]])
|
||||
|
||||
(mount/defstate ^{:on-reload :noop} http-server
|
||||
:start
|
||||
(http/start
|
||||
(-> env
|
||||
(assoc :handler (handler/app))
|
||||
(update :io-threads #(or % (* 2 (.availableProcessors (Runtime/getRuntime)))))
|
||||
(update :port #(or (-> env :options :port) %))))
|
||||
:stop
|
||||
(http/stop http-server))
|
||||
|
||||
(mount/defstate ^{:on-reload :noop} repl-server
|
||||
:start
|
||||
(when (env :nrepl-port)
|
||||
(nrepl/start {:bind (env :nrepl-bind)
|
||||
:port (env :nrepl-port)}))
|
||||
:stop
|
||||
(when repl-server
|
||||
(nrepl/stop repl-server)))
|
||||
|
||||
|
||||
(defn init-jndi []
|
||||
(System/setProperty "java.naming.factory.initial"
|
||||
"org.apache.naming.java.javaURLContextFactory")
|
||||
(System/setProperty "java.naming.factory.url.pkgs"
|
||||
"org.apache.naming"))
|
||||
|
||||
(defn start-app [args]
|
||||
(init-jndi)
|
||||
(doseq [component (-> args
|
||||
(parse-opts cli-options)
|
||||
mount/start-with-args
|
||||
:started)]
|
||||
(log/info component "started"))
|
||||
(.addShutdownHook (Runtime/getRuntime) (Thread. handler/destroy)))
|
||||
|
||||
(defn -main [& args]
|
||||
(mount/start #'pastoralist.config/env)
|
||||
(cond
|
||||
(nil? (:database-url env))
|
||||
(do
|
||||
(log/error "Database configuration not found, :database-url environment variable must be set before running")
|
||||
(System/exit 1))
|
||||
(some #{"init"} args)
|
||||
(do
|
||||
(migrations/init (select-keys env [:database-url :init-script]))
|
||||
(System/exit 0))
|
||||
(migrations/migration? args)
|
||||
(do
|
||||
(migrations/migrate args (select-keys env [:database-url]))
|
||||
(System/exit 0))
|
||||
:else
|
||||
(start-app args)))
|
||||
|
||||
11
env/dev/clj/pastoralist/dev_middleware.clj
vendored
Normal file
11
env/dev/clj/pastoralist/dev_middleware.clj
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
(ns pastoralist.dev-middleware
|
||||
(:require
|
||||
[ring.middleware.reload :refer [wrap-reload]]
|
||||
[selmer.middleware :refer [wrap-error-page]]
|
||||
[prone.middleware :refer [wrap-exceptions]]))
|
||||
|
||||
(defn wrap-dev [handler]
|
||||
(-> handler
|
||||
wrap-reload
|
||||
wrap-error-page
|
||||
(wrap-exceptions {:app-namespaces ['pastoralist]})))
|
||||
15
env/dev/clj/pastoralist/env.clj
vendored
Normal file
15
env/dev/clj/pastoralist/env.clj
vendored
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
(ns pastoralist.env
|
||||
(:require
|
||||
[selmer.parser :as parser]
|
||||
[clojure.tools.logging :as log]
|
||||
[pastoralist.dev-middleware :refer [wrap-dev]]))
|
||||
|
||||
(def defaults
|
||||
{:init
|
||||
(fn []
|
||||
(parser/cache-off!)
|
||||
(log/info "\n-=[pastoralist started successfully using the development profile]=-"))
|
||||
:stop
|
||||
(fn []
|
||||
(log/info "\n-=[pastoralist has shut down successfully]=-"))
|
||||
:middleware wrap-dev})
|
||||
12
env/dev/clj/pastoralist/figwheel.clj
vendored
Normal file
12
env/dev/clj/pastoralist/figwheel.clj
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
(ns pastoralist.figwheel
|
||||
(:require [figwheel-sidecar.repl-api :as ra]))
|
||||
|
||||
(defn start-fw []
|
||||
(ra/start-figwheel!))
|
||||
|
||||
(defn stop-fw []
|
||||
(ra/stop-figwheel!))
|
||||
|
||||
(defn cljs []
|
||||
(ra/cljs-repl))
|
||||
|
||||
64
env/dev/clj/user.clj
vendored
Normal file
64
env/dev/clj/user.clj
vendored
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
(ns user
|
||||
"Userspace functions you can run by default in your local REPL."
|
||||
(:require
|
||||
[pastoralist.config :refer [env]]
|
||||
[clojure.pprint]
|
||||
[clojure.spec.alpha :as s]
|
||||
[expound.alpha :as expound]
|
||||
[mount.core :as mount]
|
||||
[pastoralist.figwheel :refer [start-fw stop-fw cljs]]
|
||||
[pastoralist.core :refer [start-app]]
|
||||
[pastoralist.db.core]
|
||||
[conman.core :as conman]
|
||||
[luminus-migrations.core :as migrations]))
|
||||
|
||||
(alter-var-root #'s/*explain-out* (constantly expound/printer))
|
||||
|
||||
(add-tap (bound-fn* clojure.pprint/pprint))
|
||||
|
||||
(defn start
|
||||
"Starts application.
|
||||
You'll usually want to run this on startup."
|
||||
[]
|
||||
(mount/start-without #'pastoralist.core/repl-server))
|
||||
|
||||
(defn stop
|
||||
"Stops application."
|
||||
[]
|
||||
(mount/stop-except #'pastoralist.core/repl-server))
|
||||
|
||||
(defn restart
|
||||
"Restarts application."
|
||||
[]
|
||||
(stop)
|
||||
(start))
|
||||
|
||||
(defn restart-db
|
||||
"Restarts database."
|
||||
[]
|
||||
(mount/stop #'pastoralist.db.core/*db*)
|
||||
(mount/start #'pastoralist.db.core/*db*)
|
||||
(binding [*ns* 'pastoralist.db.core]
|
||||
(conman/bind-connection pastoralist.db.core/*db* "sql/queries.sql")))
|
||||
|
||||
(defn reset-db
|
||||
"Resets database."
|
||||
[]
|
||||
(migrations/migrate ["reset"] (select-keys env [:database-url])))
|
||||
|
||||
(defn migrate
|
||||
"Migrates database up for all outstanding migrations."
|
||||
[]
|
||||
(migrations/migrate ["migrate"] (select-keys env [:database-url])))
|
||||
|
||||
(defn rollback
|
||||
"Rollback latest database migration."
|
||||
[]
|
||||
(migrations/migrate ["rollback"] (select-keys env [:database-url])))
|
||||
|
||||
(defn create-migration
|
||||
"Create a new up and down migration file with a generated timestamp and `name`."
|
||||
[name]
|
||||
(migrations/create name (select-keys env [:database-url])))
|
||||
|
||||
|
||||
19
env/dev/cljs/pastoralist/app.cljs
vendored
Normal file
19
env/dev/cljs/pastoralist/app.cljs
vendored
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
(ns^:figwheel-no-load pastoralist.app
|
||||
(:require
|
||||
[pastoralist.core :as core]
|
||||
[cljs.spec.alpha :as s]
|
||||
[expound.alpha :as expound]
|
||||
[devtools.core :as devtools]))
|
||||
|
||||
(extend-protocol IPrintWithWriter
|
||||
js/Symbol
|
||||
(-pr-writer [sym writer _]
|
||||
(-write writer (str "\"" (.toString sym) "\""))))
|
||||
|
||||
(set! s/*explain-out* expound/printer)
|
||||
|
||||
(enable-console-print!)
|
||||
|
||||
(devtools/install!)
|
||||
|
||||
(core/init! true)
|
||||
1
env/dev/resources/config.edn
vendored
Normal file
1
env/dev/resources/config.edn
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
{}
|
||||
35
env/dev/resources/logback.xml
vendored
Normal file
35
env/dev/resources/logback.xml
vendored
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="10 seconds">
|
||||
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<!-- encoders are assigned the type
|
||||
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
|
||||
<encoder>
|
||||
<charset>UTF-8</charset>
|
||||
<pattern>%date{ISO8601} [%thread] %-5level %logger{36} - %msg %n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>log/pastoralist.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>log/pastoralist.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>100MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
<!-- keep 30 days of history -->
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<charset>UTF-8</charset>
|
||||
<pattern>%date{ISO8601} [%thread] %-5level %logger{36} - %msg %n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
<logger name="org.apache.http" level="warn" />
|
||||
<logger name="org.xnio.nio" level="warn" />
|
||||
<logger name="com.zaxxer.hikari" level="warn" />
|
||||
<logger name="org.eclipse.jetty" level="warn" />
|
||||
<root level="DEBUG">
|
||||
<appender-ref ref="STDOUT" />
|
||||
<appender-ref ref="FILE" />
|
||||
</root>
|
||||
</configuration>
|
||||
11
env/prod/clj/pastoralist/env.clj
vendored
Normal file
11
env/prod/clj/pastoralist/env.clj
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
(ns pastoralist.env
|
||||
(:require [clojure.tools.logging :as log]))
|
||||
|
||||
(def defaults
|
||||
{:init
|
||||
(fn []
|
||||
(log/info "\n-=[pastoralist started successfully]=-"))
|
||||
:stop
|
||||
(fn []
|
||||
(log/info "\n-=[pastoralist has shut down successfully]=-"))
|
||||
:middleware identity})
|
||||
7
env/prod/cljs/pastoralist/app.cljs
vendored
Normal file
7
env/prod/cljs/pastoralist/app.cljs
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
(ns pastoralist.app
|
||||
(:require [pastoralist.core :as core]))
|
||||
|
||||
;;ignore println statements in prod
|
||||
(set! *print-fn* (fn [& _]))
|
||||
|
||||
(core/init! false)
|
||||
2
env/prod/resources/config.edn
vendored
Normal file
2
env/prod/resources/config.edn
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
{:prod true
|
||||
:port 3000}
|
||||
26
env/prod/resources/logback.xml
vendored
Normal file
26
env/prod/resources/logback.xml
vendored
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
|
||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>log/pastoralist.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>log/pastoralist.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>100MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
<!-- keep 30 days of history -->
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<charset>UTF-8</charset>
|
||||
<pattern>%date{ISO8601} [%thread] %-5level %logger{36} - %msg %n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
<logger name="org.apache.http" level="warn" />
|
||||
<logger name="org.xnio.nio" level="warn" />
|
||||
<logger name="com.zaxxer.hikari" level="warn" />
|
||||
<logger name="org.eclipse.jetty" level="warn" />
|
||||
<root level="INFO">
|
||||
<appender-ref ref="FILE" />
|
||||
</root>
|
||||
</configuration>
|
||||
1
env/test/resources/config.edn
vendored
Normal file
1
env/test/resources/config.edn
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
{}
|
||||
35
env/test/resources/logback.xml
vendored
Normal file
35
env/test/resources/logback.xml
vendored
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="10 seconds">
|
||||
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<!-- encoders are assigned the type
|
||||
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
|
||||
<encoder>
|
||||
<charset>UTF-8</charset>
|
||||
<pattern>%date{ISO8601} [%thread] %-5level %logger{36} - %msg %n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>log/pastoralist.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>log/pastoralist.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>100MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
<!-- keep 30 days of history -->
|
||||
<maxHistory>30</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<charset>UTF-8</charset>
|
||||
<pattern>%date{ISO8601} [%thread] %-5level %logger{36} - %msg %n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
<logger name="org.apache.http" level="warn" />
|
||||
<logger name="org.xnio.nio" level="warn" />
|
||||
<logger name="com.zaxxer.hikari" level="warn" />
|
||||
<logger name="org.eclipse.jetty" level="warn" />
|
||||
<root level="DEBUG">
|
||||
<appender-ref ref="STDOUT" />
|
||||
<appender-ref ref="FILE" />
|
||||
</root>
|
||||
</configuration>
|
||||
Loading…
Add table
Add a link
Reference in a new issue