|
2 | 2 | (:require [metrics.core :refer [default-registry]]
|
3 | 3 | [metrics.counters :refer (counter inc! dec!)]
|
4 | 4 | [metrics.meters :refer (meter mark!)]
|
5 |
| - [metrics.timers :refer (timer time!)] |
| 5 | + [metrics.timers :refer (timer time! start stop)] |
6 | 6 | [clojure.string :as string])
|
7 | 7 | (:import [com.codahale.metrics MetricRegistry]))
|
8 | 8 |
|
|
51 | 51 | :times times
|
52 | 52 | :request-methods request-methods}))
|
53 | 53 |
|
54 |
| -(defn handle-request [handler metrics request] |
55 |
| - (let [{:keys [active-requests requests responses |
56 |
| - schemes statuses times request-methods]} metrics] |
57 |
| - (inc! active-requests) |
58 |
| - (try |
59 |
| - (let [request-method (:request-method request) |
60 |
| - request-scheme (:scheme request)] |
61 |
| - (mark! requests) |
62 |
| - (mark-in! request-methods request-method) |
63 |
| - (mark-in! schemes request-scheme) |
64 |
| - (let [resp (time! (times request-method (times :other)) |
65 |
| - (handler request)) |
66 |
| - ^{:tag "int"} status-code (or (:status resp) 404)] |
67 |
| - (mark! responses) |
68 |
| - (mark-in! statuses (int (/ status-code 100))) |
69 |
| - resp)) |
70 |
| - (finally (dec! active-requests))))) |
| 54 | +(defn- time-request [thunk metrics request] |
| 55 | + (let [{:keys [active-requests requests responses |
| 56 | + schemes statuses times request-methods]} metrics] |
| 57 | + (inc! active-requests) |
| 58 | + (try |
| 59 | + (let [request-method (:request-method request) |
| 60 | + request-scheme (:scheme request)] |
| 61 | + (mark! requests) |
| 62 | + (mark-in! request-methods request-method) |
| 63 | + (mark-in! schemes request-scheme) |
| 64 | + (let [resp (time! (times request-method (times :other)) |
| 65 | + (thunk)) |
| 66 | + ^{:tag "int"} status-code (or (:status resp) 404)] |
| 67 | + (mark! responses) |
| 68 | + (mark-in! statuses (int (/ status-code 100))) |
| 69 | + resp)) |
| 70 | + (finally (dec! active-requests))))) |
| 71 | + |
| 72 | +(defn handle-request |
| 73 | + ([handler metrics request] |
| 74 | + (time-request #(handler request) metrics request)) |
| 75 | + ([handler metrics request respond raise] |
| 76 | + (try |
| 77 | + (time-request #(handler request respond raise) metrics request) |
| 78 | + (catch Exception e (raise e))))) |
71 | 79 |
|
72 | 80 | (defn metrics-for
|
73 | 81 | [metrics-db prefix registry]
|
|
87 | 95 | ([handler]
|
88 | 96 | (instrument handler default-registry))
|
89 | 97 | ([handler ^MetricRegistry reg]
|
90 |
| - (fn [request] |
91 |
| - (handle-request handler |
92 |
| - (ring-metrics reg {:prefix []}) |
93 |
| - request)))) |
| 98 | + (fn |
| 99 | + ([request] |
| 100 | + (handle-request handler |
| 101 | + (ring-metrics reg {:prefix []}) |
| 102 | + request)) |
| 103 | + ([request respond raise] |
| 104 | + (handle-request handler |
| 105 | + (ring-metrics reg {:prefix []}) |
| 106 | + request respond raise))))) |
94 | 107 |
|
95 | 108 | (defn instrument-by
|
96 | 109 | "Instrument a ring handler using the metrics returned by the `metrics-for`
|
|
107 | 120 | (instrument-by handler default-registry metrics-prefix))
|
108 | 121 | ([handler ^MetricRegistry reg metrics-prefix]
|
109 | 122 | (let [metrics-db (atom {})]
|
110 |
| - (fn [request] |
111 |
| - (let [prefix (metrics-prefix request)] |
112 |
| - (handle-request handler |
113 |
| - (metrics-for metrics-db prefix reg) |
114 |
| - request)))))) |
| 123 | + (fn |
| 124 | + ([request] |
| 125 | + (handle-request handler |
| 126 | + (metrics-for metrics-db (metrics-prefix request) reg) |
| 127 | + request)) |
| 128 | + ([request respond raise] |
| 129 | + (handle-request handler |
| 130 | + (metrics-for metrics-db (metrics-prefix request) reg) |
| 131 | + request respond raise)))))) |
0 commit comments