blob: 1e93126ca80043767d48afe6f2d59037aa238a98 (
plain)
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
|
(ns weepinbell.webserver.facade
(:require [org.httpkit.server :refer [run-server]]
[taoensso.timbre :as timbre]
[clojure.spec.alpha :as s]
[weepinbell.webserver.handler :refer [app]]
;; services
[weepinbell.webserver.receiver :as receiver]
[weepinbell.webserver.retriever :as retriever]
[weepinbell.webserver.feed :as feed]
[weepinbell.webserver.counter :as counter]))
(s/def ::server-meta
(s/keys :req-un [::wmc ::store ::config]))
(defn make-services []
{:post [#(s/valid? :weepinbell.webserver.handler/services %)]}
{:gen-feed feed/rss
:receive receiver/receive
:retrieve-by-domain retriever/by-domain
:retrieve-by-url retriever/by-url
:retrieve-by-id retriever/by-id
:retrieve-by-pair retriever/by-st-pair
:count-by-domain counter/by-domain
:count-by-url counter/by-url})
(defn start-webserver
"Starts web server. Returns a function that stops the server."
[metadata]
{:pre [(s/valid? ::server-meta metadata)]
:post [fn?]}
(let [{:keys [config]} metadata
api-meta (assoc metadata :services (make-services))
port (Integer/parseInt (or (:port config) (System/getenv "PORT") "3000"))]
(timbre/info "starting web server, listening on" port)
(run-server (app api-meta) {:port port})))
|