summaryrefslogtreecommitdiffstats
path: root/server/src/http_server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/http_server.cpp')
-rw-r--r--server/src/http_server.cpp34
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;
13module routemon:http.server$impl; 13module routemon:http.server$impl;
14 14
15import :http.server; 15import :http.server;
16import :trace;
17
18namespace chrono = std::chrono;
16 19
17namespace routemon::http { 20namespace 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
89auto router::handle_request(readable_request r) const 92auto 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
95server::server(log::logger const& l, router&& r) 98server::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;