Skip to content
This repository has been archived by the owner on Mar 22, 2023. It is now read-only.

Commit

Permalink
Response with instance (#237)
Browse files Browse the repository at this point in the history
* Adds :instance to response, more refactoring.

* Feedback from @shamsimam

* Fixes nitpick

* Uses fa instead of refer <? and go-try.  Fixes comments.
  • Loading branch information
sradack authored and shamsimam committed Mar 19, 2018
1 parent 9606271 commit 7261b7b
Show file tree
Hide file tree
Showing 8 changed files with 196 additions and 192 deletions.
45 changes: 29 additions & 16 deletions waiter/src/waiter/core.clj
Original file line number Diff line number Diff line change
Expand Up @@ -177,18 +177,30 @@

(defn wrap-debug
"Attaches debugging headers to requests when enabled."
[handler]
[handler generate-log-url-fn]
(fn wrap-debug-fn
[{:keys [request-id request-time router-id] :as request}]
(if (utils/request->debug-enabled? request)
(let [response (handler request)
add-headers (fn [response]
(update response :headers
(fn [headers]
(-> headers
(assoc "x-waiter-request-date" (utils/date-to-str request-time utils/formatter-rfc822))
(assoc "x-waiter-request-id" request-id)
(assoc "x-waiter-router-id" router-id)))))]
add-headers (fn [{:keys [descriptor instance] :as response}]
(let [backend-directory (:log-directory instance)
backend-log-url (when backend-directory
(generate-log-url-fn instance))
request-date (when request-time
(utils/date-to-str request-time utils/formatter-rfc822))]
(update response :headers
(fn [headers]
(cond-> headers
request-time (assoc "x-waiter-request-date" request-date)
request-id (assoc "x-waiter-request-id" request-id)
router-id (assoc "x-waiter-router-id" router-id)
descriptor (assoc "x-waiter-service-id" (:service-id descriptor))
instance (assoc "x-waiter-backend-id" (:id instance)
"x-waiter-backend-host" (:host instance)
"x-waiter-backend-port" (str (:port instance))
"x-waiter-backend-proto" (:protocol instance))
backend-directory (assoc "x-waiter-backend-directory" backend-directory
"x-waiter-backend-log-url" backend-log-url))))))]
(ru/update-response response add-headers))
(handler request))))

Expand Down Expand Up @@ -634,6 +646,8 @@
(let [position-generator-atom (atom 0)]
(fn determine-priority-fn [waiter-headers]
(pr/determine-priority position-generator-atom waiter-headers))))
:generate-log-url-fn (pc/fnk [prepend-waiter-url]
(partial handler/generate-log-url prepend-waiter-url))
:list-tokens-fn (pc/fnk [[:curator curator]
[:settings [:zookeeper base-path] kv-config]]
(fn list-tokens-fn []
Expand Down Expand Up @@ -953,10 +967,10 @@
passthrough-headers end-route metric-group))]
(let [process-request-fn (fn process-request-fn [request]
(pr/process make-request-fn instance-rpc-chan start-new-service-fn
instance-request-properties prepend-waiter-url
determine-priority-fn ws/process-response! ws/process-exception-in-request
instance-request-properties determine-priority-fn ws/process-response!
ws/abort-request-callback-factory local-usage-agent request))
handler (-> process-request-fn
(ws/wrap-ws-close-on-error)
(pr/wrap-descriptor request->descriptor-fn))]
(ws/request-handler password handler request)))))
:display-settings-handler-fn (pc/fnk [wrap-secure-request-fn settings]
Expand Down Expand Up @@ -990,8 +1004,7 @@
process-response-fn (partial pr/process-http-response post-process-async-request-response-fn)
inner-process-request-fn (fn inner-process-request [request]
(pr/process make-request-fn instance-rpc-chan start-new-service-fn
instance-request-properties prepend-waiter-url
determine-priority-fn process-response-fn pr/process-exception-in-http-request
instance-request-properties determine-priority-fn process-response-fn
pr/abort-http-request-callback-factory local-usage-agent request))]
(-> inner-process-request-fn
pr/wrap-too-many-requests
Expand All @@ -1008,13 +1021,13 @@
(metrics-sync/incoming-router-metrics-handler
router-metrics-agent metrics-sync-interval-ms bytes-encryptor bytes-decryptor request))))
:service-handler-fn (pc/fnk [[:curator kv-store]
[:routines allowed-to-manage-service?-fn make-inter-router-requests-sync-fn prepend-waiter-url]
[:routines allowed-to-manage-service?-fn generate-log-url-fn make-inter-router-requests-sync-fn]
[:state router-id scheduler]
wrap-secure-request-fn]
(wrap-secure-request-fn
(fn service-handler-fn [{:as request {:keys [service-id]} :route-params}]
(handler/service-handler router-id service-id scheduler kv-store allowed-to-manage-service?-fn
prepend-waiter-url make-inter-router-requests-sync-fn request))))
generate-log-url-fn make-inter-router-requests-sync-fn request))))
:service-id-handler-fn (pc/fnk [[:curator kv-store]
[:routines request->descriptor-fn store-service-description-fn]
wrap-secure-request-fn]
Expand Down Expand Up @@ -1062,12 +1075,12 @@
(fn service-suspend-handler-fn [{:as request {:keys [service-id]} :route-params}]
(handler/suspend-or-resume-service-handler
kv-store allowed-to-manage-service?-fn make-inter-router-requests-sync-fn service-id :suspend request))))
:service-view-logs-handler-fn (pc/fnk [[:routines prepend-waiter-url]
:service-view-logs-handler-fn (pc/fnk [[:routines generate-log-url-fn]
[:state scheduler]
wrap-secure-request-fn]
(wrap-secure-request-fn
(fn service-view-logs-handler-fn [{:as request {:keys [service-id]} :route-params}]
(handler/service-view-logs-handler scheduler service-id prepend-waiter-url request))))
(handler/service-view-logs-handler scheduler service-id generate-log-url-fn request))))
:sim-request-handler (pc/fnk [] simulator/handle-sim-request)
:state-all-handler-fn (pc/fnk [[:curator leader?-fn kv-store]
[:daemons router-state-maintainer scheduler-maintainer]
Expand Down
23 changes: 11 additions & 12 deletions waiter/src/waiter/handler.clj
Original file line number Diff line number Diff line change
Expand Up @@ -288,17 +288,17 @@

(defn- assoc-log-url
"Appends the :log-url field for an instance"
[prepend-waiter-url service-instance]
(assoc service-instance :log-url (generate-log-url prepend-waiter-url service-instance)))
[generate-log-url-fn service-instance]
(assoc service-instance :log-url (generate-log-url-fn service-instance)))

(defn- get-service-handler
"Returns details about the service such as the service description, metrics, instances, etc."
[router-id service-id core-service-description scheduler kv-store prepend-waiter-url make-inter-router-requests-fn]
[router-id service-id core-service-description scheduler kv-store generate-log-url-fn make-inter-router-requests-fn]
(let [service-instance-maps (try
(let [assoc-log-url-to-instances
(fn assoc-log-url-to-instances [instances]
(when (not-empty instances)
(map #(assoc-log-url prepend-waiter-url %1) instances)))]
(map #(assoc-log-url generate-log-url-fn %) instances)))]
(-> (scheduler/get-instances scheduler service-id core-service-description)
(update-in [:active-instances] assoc-log-url-to-instances)
(update-in [:failed-instances] assoc-log-url-to-instances)
Expand Down Expand Up @@ -354,7 +354,7 @@
It supports the following request methods:
:delete deletes the service from the scheduler (after authorization checks).
:get returns details about the service such as the service description, metrics, instances, etc."
[router-id service-id scheduler kv-store allowed-to-manage-service?-fn prepend-waiter-url make-inter-router-requests-fn request]
[router-id service-id scheduler kv-store allowed-to-manage-service?-fn generate-log-url-fn make-inter-router-requests-fn request]
(try
(when (not service-id)
(throw (ex-info "Missing service-id" {:status 400})))
Expand All @@ -364,7 +364,7 @@
(case (:request-method request)
:delete (delete-service-handler service-id core-service-description scheduler allowed-to-manage-service?-fn request)
:get (get-service-handler router-id service-id core-service-description scheduler kv-store
prepend-waiter-url make-inter-router-requests-fn))))
generate-log-url-fn make-inter-router-requests-fn))))
(catch Exception ex
(utils/exception->response ex request))))

Expand Down Expand Up @@ -447,7 +447,7 @@

(defn service-view-logs-handler
"Redirects user to the log directory on the slave"
[scheduler service-id prepend-waiter-url request]
[scheduler service-id generate-log-url-fn request]
(try
(let [{:strs [instance-id host directory]} (-> request ru/query-params-request :query-params)
_ (when-not instance-id
Expand All @@ -458,11 +458,10 @@
(if (= type "file")
entry
(-> (dissoc entry :path)
(assoc :url (generate-log-url prepend-waiter-url
{:directory path
:host host
:id instance-id
:service-id service-id})))))
(assoc :url (generate-log-url-fn {:directory path
:host host
:id instance-id
:service-id service-id})))))
(scheduler/retrieve-directory-content scheduler service-id instance-id host directory))]
(utils/map->json-response (vec directory-content)))
(catch Exception ex
Expand Down
4 changes: 2 additions & 2 deletions waiter/src/waiter/main.clj
Original file line number Diff line number Diff line change
Expand Up @@ -66,15 +66,15 @@
:daemons core/daemons
:handlers core/request-handlers
:state core/state
:http-server (pc/fnk [[:routines waiter-request?-fn websocket-request-authenticator]
:http-server (pc/fnk [[:routines generate-log-url-fn waiter-request?-fn websocket-request-authenticator]
[:settings cors-config host port support-info websocket-config]
[:state cors-validator router-id]
handlers] ; Insist that all systems are running before we start server
(let [options (merge websocket-config
{:ring-handler (-> (core/ring-handler-factory waiter-request?-fn handlers)
(cors/wrap-cors-preflight cors-validator (:max-age cors-config))
core/wrap-error-handling
core/wrap-debug
(core/wrap-debug generate-log-url-fn)
core/correlation-id-middleware
(core/wrap-request-info router-id support-info)
consume-request-stream)
Expand Down
Loading

0 comments on commit 7261b7b

Please sign in to comment.