blob: 453aba615fb73811cc7bf03031c0215da9615c5e (
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
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
|
(ns chameleon.handler
(:require [chameleon.route :as c-route]
[utilis.map :refer [map-vals compact]]
[liberator.core :refer [defresource]]
[compojure.core :refer [GET PUT PATCH ANY defroutes]]
[compojure.route :refer [resources]]
[ring.util.response :refer [resource-response content-type]]
[ring.middleware.defaults :refer [wrap-defaults api-defaults]]
[ring.middleware.anti-forgery :refer [wrap-anti-forgery]]
[ring.middleware.session :refer [wrap-session]]
[cheshire.core :as json]
[clj-time.format :as tf]
[integrant.core :as ig]
[chameleon.logging :as log]))
(declare handler)
(defonce ^:private g-host (atom nil))
(defonce ^:private g-transformer nil)
(defmethod ig/init-key :chameleon/handler [_ {:keys [gallifrey-host loggers gallifrey-transformer]}]
(reset! g-host gallifrey-host)
(def g-transformer gallifrey-transformer)
(handler loggers))
(defmethod ig/halt-key! :chameleon/handler [_ _]
(reset! g-host nil)
(def g-transformer nil))
(declare serialize de-serialize)
(defresource resource-endpoint [type id]
:allowed-methods [:get]
:available-media-types ["application/json"]
:exists? (fn [ctx]
(let [resource (c-route/query @g-host id type (-> ctx
:request
:params
(select-keys [:t-t :t-k])))] ; Only pass through the allowable set of keys
(when (= (:status resource) 200)
{::resource (-> resource
:body
json/parse-string
(dissoc "_meta")
(g-transformer))})))
:existed? (fn [ctx]
(when-let [status (-> (c-route/query @g-host id type (-> ctx
:request
:params
(select-keys [:t-t :t-k]))) ;Only pass through the allowable set of keys
:status)]
(= status 410)))
:handle-ok ::resource)
(defroutes app-routes
(GET "/entity/:id" [id] (resource-endpoint "entity" id))
(GET "/relationship/:id" [id] (resource-endpoint "relationship" id))
(resources "/"))
(defn log-reqs
[handler loggers]
(let [[error-logger audit-logger] loggers]
(fn [request]
(log/mdc-init! (get-in request [:headers "X-TransactionId"]) "CHAMELEON"
"CHAMELEON_SERVICE" "ONAP" (:remote-addr request))
(log/info error-logger "CHAMELEON_REQUEST" (mapv str ((juxt (comp name :request-method) :uri :remote-addr) request)))
(let [resp (handler request)
fields (->> ((juxt :status :body) resp)
(into ((juxt (comp name :request-method) :uri) request))
(mapv str))]
(log/info error-logger "RESPONSE" fields)
(log/info audit-logger "RESPONSE" fields)
(log/mdc-clear!)
resp))))
(defn handler
[loggers]
(-> app-routes
(wrap-defaults api-defaults)
(log-reqs loggers)))
|