Skip to content

Commit 161b903

Browse files
committed
Add support for async handlers in expose metrics
1 parent 1bbe8ee commit 161b903

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

metrics-clojure-ring/src/metrics/ring/expose.clj

+21-6
Original file line numberDiff line numberDiff line change
@@ -114,18 +114,24 @@
114114
(into {} (map #(render-metric % unit-context) (->> registry
115115
(all-metrics)
116116
(filter-metrics filter))))))
117-
118-
(defn serve-metrics
119-
([request]
120-
(serve-metrics request default-registry))
117+
(defn- serve-metrics*
121118
([request registry]
122-
(serve-metrics request registry false))
119+
(render-metrics request registry false))
123120
([request registry {:keys [pretty-print? filter rate-unit duration-unit]}]
124121
(let [metrics-map (render-metrics registry filter (unit/build-options rate-unit duration-unit))
125122
json (generate-string metrics-map {:pretty pretty-print?})]
126123
(-> (response json)
127124
(header "Content-Type" "application/json")))))
128125

126+
(defn serve-metrics
127+
([request]
128+
(serve-metrics* request default-registry))
129+
([request respond raise]
130+
(try
131+
(respond (serve-metrics* request default-registry))
132+
(catch Exception e (raise e)))))
133+
134+
129135
(defn expose-metrics-as-json
130136
([handler]
131137
(expose-metrics-as-json handler "/metrics"))
@@ -142,4 +148,13 @@
142148
(serve-metrics request registry (merge {:filter filter
143149
:rate-unit TimeUnit/SECONDS
144150
:duration-unit TimeUnit/NANOSECONDS} opts))
145-
(handler request))))))
151+
(handler request))))
152+
(fn [request respond raise]
153+
(let [^String request-uri (:uri request)
154+
^String filter (get-in request [:params :filter])]
155+
(if (or (.startsWith request-uri (sanitize-uri uri))
156+
(= request-uri uri))
157+
(serve-metrics request registry (merge {:filter filter
158+
:rate-unit TimeUnit/SECONDS
159+
:duration-unit TimeUnit/NANOSECONDS} opts))
160+
(handler request respond raise))))))

0 commit comments

Comments
 (0)