diff --git a/src/prometheus/tiny_httpd_prometheus.ml b/src/prometheus/tiny_httpd_prometheus.ml index d9157ddf..e0a1f3cd 100644 --- a/src/prometheus/tiny_httpd_prometheus.ml +++ b/src/prometheus/tiny_httpd_prometheus.ml @@ -104,3 +104,12 @@ let http_middleware (reg : Registry.t) : H.Middleware.t = let code = response.code in if code < 200 || code >= 300 then Counter.incr c_err; resp response) + +let add_route_to_server (server : H.t) (reg : registry) : unit = + H.add_route_handler server H.Route.(exact "metrics" @/ return) @@ fun _req -> + let str = Registry.emit_str reg in + H.Response.make_string @@ Ok str + +let instrument_server (server : H.t) reg : unit = + H.add_middleware ~stage:(`Stage 1) server (http_middleware global); + add_route_to_server server reg diff --git a/src/prometheus/tiny_httpd_prometheus.mli b/src/prometheus/tiny_httpd_prometheus.mli index b295f687..a2104af1 100644 --- a/src/prometheus/tiny_httpd_prometheus.mli +++ b/src/prometheus/tiny_httpd_prometheus.mli @@ -49,3 +49,10 @@ end *) val http_middleware : Registry.t -> Tiny_httpd.Middleware.t +(** Middleware to get basic metrics about HTTP requests *) + +val add_route_to_server : Tiny_httpd.t -> Registry.t -> unit +(** Add a "/metrics" route to the server *) + +val instrument_server : Tiny_httpd.t -> Registry.t -> unit +(** Add middleware and route *)