diff options
Diffstat (limited to 'server/src/http_server.cpp')
| -rw-r--r-- | server/src/http_server.cpp | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/server/src/http_server.cpp b/server/src/http_server.cpp index da8e6f0..c3a9ed7 100644 --- a/server/src/http_server.cpp +++ b/server/src/http_server.cpp | |||
| @@ -13,6 +13,9 @@ module; | |||
| 13 | module routemon:http.server$impl; | 13 | module routemon:http.server$impl; |
| 14 | 14 | ||
| 15 | import :http.server; | 15 | import :http.server; |
| 16 | import :trace; | ||
| 17 | |||
| 18 | namespace chrono = std::chrono; | ||
| 16 | 19 | ||
| 17 | namespace routemon::http { | 20 | namespace routemon::http { |
| 18 | 21 | ||
| @@ -86,10 +89,10 @@ auto global_options_handler(base_ctx const& ctx, readable_request r) | |||
| 86 | co_return std::move(rsp); | 89 | co_return std::move(rsp); |
| 87 | } | 90 | } |
| 88 | 91 | ||
| 89 | auto router::handle_request(readable_request r) const | 92 | auto router::handle_request(trace::id trace_id, readable_request r) const |
| 90 | -> net::awaitable<presponse> | 93 | -> net::awaitable<presponse> |
| 91 | { | 94 | { |
| 92 | return impl_->handle_request(r); | 95 | return impl_->handle_request(trace_id, r); |
| 93 | } | 96 | } |
| 94 | 97 | ||
| 95 | server::server(log::logger const& l, router&& r) | 98 | server::server(log::logger const& l, router&& r) |
| @@ -112,16 +115,35 @@ auto server::do_session(beast::tcp_stream strm) -> net::awaitable<void> | |||
| 112 | else if (ec) | 115 | else if (ec) |
| 113 | throw boost::system::system_error{ec}; | 116 | throw boost::system::system_error{ec}; |
| 114 | 117 | ||
| 118 | auto trace_id = trace::id{}; | ||
| 119 | auto l = l_.sub("do_session").with("trace_id", trace_id.as_string()); | ||
| 120 | l.debug("Read header, invoking request handler"); | ||
| 121 | auto const before_hdl = chrono::steady_clock::now(); | ||
| 122 | |||
| 115 | auto http_version = p0.get().version(); | 123 | auto http_version = p0.get().version(); |
| 116 | auto&& rsp = co_await r_.handle_request( | 124 | auto&& rsp = co_await r_.handle_request( |
| 117 | readable_request{ | 125 | trace_id, readable_request{ |
| 118 | .p = util::not_null{&p0}, | 126 | .p = util::not_null{&p0}, |
| 119 | .strm = util::not_null{&strm}, | 127 | .strm = util::not_null{&strm}, |
| 120 | .buf = util::not_null{&buf}, | 128 | .buf = util::not_null{&buf}, |
| 129 | }); | ||
| 130 | |||
| 131 | l.debug( | ||
| 132 | "Request handler returned after {}, writing response", | ||
| 133 | chrono::duration<double, std::milli>{ | ||
| 134 | chrono::steady_clock::now() - before_hdl | ||
| 121 | }); | 135 | }); |
| 136 | auto before_write_rsp = chrono::steady_clock::now(); | ||
| 137 | |||
| 122 | rsp.header().version(http_version); | 138 | rsp.header().version(http_version); |
| 123 | bool keep_alive = rsp.keep_alive(); | 139 | bool keep_alive = rsp.keep_alive(); |
| 124 | co_await beast::async_write(strm, std::move(rsp)); | 140 | co_await beast::async_write(strm, std::move(rsp)); |
| 141 | |||
| 142 | l.debug( | ||
| 143 | "Wrote response in {}", chrono::duration<double, std::milli>{ | ||
| 144 | chrono::steady_clock::now() - before_write_rsp | ||
| 145 | }); | ||
| 146 | |||
| 125 | if (!keep_alive) | 147 | if (!keep_alive) |
| 126 | { | 148 | { |
| 127 | break; | 149 | break; |