Created
May 24, 2014 01:04
-
-
Save CampingScorpion/e023fec8441a5145d9a5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (defn wrap-middleware-logging | |
| ([handler middlware-name] | |
| (wrap-middleware-logging handler middlware-name false)) | |
| ([handler middlware-name summarize-and-log?] | |
| (fn [req] | |
| (tap (str middleware-name "-REQUEST") request) | |
| (let [start (ts/now) | |
| result (handler req) | |
| end (ts/now) | |
| result (if (map? result) ;; safety valve for legacy middlewares | |
| (update-in result | |
| [::timings] | |
| #(conj (or % []) | |
| {:middleware middlware-name | |
| :middleware-elapsed (- end start)})) | |
| result)] | |
| (tap (str middleware-name "-RESPONSE") result) | |
| (if (and summarize-and-log? | |
| (map? result)) ;; safety valve for legacy middlewares | |
| (do | |
| (tracing/info {:middleware-timings (::timings result)} | |
| [:middleware-timings]) | |
| (dissoc result ::timings)) | |
| result))))) | |
| (defn wrap-middlewares [summarizing? handler middlewares] | |
| (let [summarize?-determinations (conj (vec (repeat (dec (count middlewares)) | |
| false)) | |
| summarizing?) | |
| mw-names (map str middlewares) | |
| logging-mws (for [[summarize? mw-name] (map list | |
| summarize?-determinations | |
| mw-names)] | |
| `(wrap-middleware-logging ~mw-name ~summarize?))] | |
| `(-> ~handler | |
| ~@(interleave middlewares logging-mws)))) | |
| (defmacro summarizing-middleware-> | |
| "Top-level way to log timing info for each middleware it wraps" | |
| [handler & middlewares] | |
| (wrap-middlewares true handler middlewares)) | |
| (defmacro middleware-> | |
| "Use from within other summarizing-middleware-> calls" | |
| [handler & middlewares] | |
| (wrap-middlewares false handler middlewares)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment