From 4031e77edd2abd694114be698312d086bce6b425 Mon Sep 17 00:00:00 2001 From: Rutger Broekhoff Date: Thu, 10 Sep 2026 01:30:43 +0200 Subject: More tracing stuff --- server/src/http_server.cppm | 66 ++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 31 deletions(-) (limited to 'server/src/http_server.cppm') diff --git a/server/src/http_server.cppm b/server/src/http_server.cppm index b16f3a8..12c83db 100644 --- a/server/src/http_server.cppm +++ b/server/src/http_server.cppm @@ -164,6 +164,19 @@ auto id_middleware( co_return co_await next(std::move(ctx)); } +struct base_ctx +{ + std::locale locale; + trace::id trace_id; +}; + +template +using basic_route_handler_fn_t = + std::function const& matches) + ->net::awaitable>; + template auto cors_middleware(std::vector const& allow_origins) -> middleware_t @@ -186,39 +199,21 @@ auto cors_middleware(std::vector const& allow_origins) }; } -template -struct trace_id_ctx : InnerCtx -{ - trace::id trace_id = {}; -}; - -template +template auto trace_id_middleware( - OuterCtx ctx0, bhttp::request_header& req_hdr, - next_handler_t> next) -> net::awaitable + Ctx ctx, bhttp::request_header& req_hdr, + next_handler_t next) -> net::awaitable { std::ignore = req_hdr; - auto ctx = trace_id_ctx{std::move(ctx0)}; auto prersp = co_await next(std::move(ctx)); prersp.header().set( - "X-Routemon-Trace-Id", std::string_view{ctx.trace_id.as_string()}); + "X-Routemon-Trace-Id", + std::string_view{static_cast(ctx).trace_id.as_string()}); prersp.header().insert( bhttp::field::access_control_expose_headers, "X-Routemon-Trace-Id"); co_return std::move(prersp); } -struct base_ctx -{ - std::locale locale; -}; - -template -using basic_route_handler_fn_t = - std::function const& matches) - ->net::awaitable>; - struct keep_alive { bool value; @@ -555,7 +550,7 @@ class router struct impl_base { virtual ~impl_base() = default; - virtual auto handle_request(readable_request r) const + virtual auto handle_request(trace::id trace_id, readable_request r) const -> net::awaitable = 0; }; @@ -564,16 +559,17 @@ class router template PreRouteCtx> class impl : public impl_base { + log::logger l_; locale::selector lsel_; middleware_t global_middleware_; route_tree> routes_; public: explicit impl( - locale::selector&& lsel, + log::logger const& l, locale::selector&& lsel, middleware_t global_middleware, route_tree> routes) - : lsel_{std::move(lsel)}, + : l_{l.sub("router")}, lsel_{std::move(lsel)}, global_middleware_{std::move(global_middleware)}, routes_{std::move(routes)} { @@ -674,6 +670,13 @@ class router co_return problem_rsp(ctx, problem, keep_alive{false}); } + l_.with( + "trace_id", + static_cast(ctx).trace_id.as_string()) + .debug( + "Request targets {} {}", req_base.method_string(), + req_url.path()); + auto mres = match(req_url.segments()); if (!mres) { @@ -732,13 +735,13 @@ class router } } - auto handle_request(readable_request r) const + auto handle_request(trace::id trace_id, readable_request r) const -> net::awaitable override { auto header = r.p->get().base(); auto locale = lsel_.select(header[bhttp::field::accept_language]); co_return co_await global_middleware_( - base_ctx{.locale = locale}, header, + base_ctx{.locale = locale, .trace_id = trace_id}, header, [&](PreRouteCtx ctx) -> net::awaitable { co_return co_await route_request(std::move(ctx), std::move(r)); }); } @@ -747,15 +750,16 @@ class router public: template PreRouteCtx> explicit router( - locale::selector&& lsel, + log::logger const& l, locale::selector&& lsel, middleware_t global_middleware, route_tree> routes) : impl_{std::make_unique>( - std::move(lsel), std::move(global_middleware), std::move(routes))} + l, std::move(lsel), std::move(global_middleware), std::move(routes))} { } - auto handle_request(readable_request r) const -> net::awaitable; + auto handle_request(trace::id trace_id, readable_request r) const + -> net::awaitable; }; class server -- cgit v1.3