aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/admin/admin.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2023-09-22 03:47:31 -0400
committerGitHub <[email protected]>2023-09-22 09:47:31 +0200
commit34132b6d936ea4077f8c96d84a00c74496332a4f (patch)
tree865131960ed43e2e9a0db5d2eb80144a204b4969 /src/zenserver/admin/admin.cpp
parentImprovement: Add names to background jobs for easier debugging (#412) (diff)
downloadzen-34132b6d936ea4077f8c96d84a00c74496332a4f.tar.xz
zen-34132b6d936ea4077f8c96d84a00c74496332a4f.zip
add trace command to enable/disable tracing at runtime (#416)
* add trace command to enable/disable tracing at runtime * rework tracing init/start/stop * changelog
Diffstat (limited to 'src/zenserver/admin/admin.cpp')
-rw-r--r--src/zenserver/admin/admin.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/zenserver/admin/admin.cpp b/src/zenserver/admin/admin.cpp
index cef2ba403..05ae0a24a 100644
--- a/src/zenserver/admin/admin.cpp
+++ b/src/zenserver/admin/admin.cpp
@@ -5,6 +5,10 @@
#include <zencore/compactbinarybuilder.h>
#include <zencore/jobqueue.h>
#include <zencore/string.h>
+#if ZEN_WITH_TRACE
+# include <zencore/trace.h>
+#endif // ZEN_WITH_TRACE
+
#include <zenstore/gc.h>
#include <chrono>
@@ -248,6 +252,69 @@ HttpAdminService::HttpAdminService(GcScheduler& Scheduler, JobQueue& BackgroundJ
Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Obj.Save());
},
HttpVerb::kPost);
+#if ZEN_WITH_TRACE
+ m_Router.RegisterRoute(
+ "trace",
+ [this](HttpRouterRequest& Req) {
+ bool Enabled = IsTracing();
+ return Req.ServerRequest().WriteResponse(HttpResponseCode::OK, HttpContentType::kText, Enabled ? "enabled" : "disabled");
+ },
+ HttpVerb::kGet);
+
+ m_Router.RegisterRoute(
+ "trace/start",
+ [this](HttpRouterRequest& Req) {
+ HttpServerRequest& HttpReq = Req.ServerRequest();
+ const HttpServerRequest::QueryParams Params = HttpReq.GetQueryParams();
+ TraceType Type = TraceType::None;
+ std::string HostOrPath;
+ if (auto Param = Params.GetValue("file"); Param.empty() == false)
+ {
+ Type = TraceType::File;
+ HostOrPath = Param;
+ }
+ if (auto Param = Params.GetValue("host"); Param.empty() == false)
+ {
+ Type = TraceType::Network;
+ HostOrPath = Param;
+ }
+ if (Type == TraceType::None)
+ {
+ return Req.ServerRequest().WriteResponse(HttpResponseCode::BadRequest,
+ HttpContentType::kText,
+ "Invalid trace type, use `file` or `host`"sv);
+ }
+ if (IsTracing())
+ {
+ return Req.ServerRequest().WriteResponse(HttpResponseCode::BadRequest,
+ HttpContentType::kText,
+ "Tracing is already enabled"sv);
+ }
+ TraceStart(HostOrPath.c_str(), Type);
+ return Req.ServerRequest().WriteResponse(HttpResponseCode::OK, HttpContentType::kText, "Tracing started");
+ },
+ HttpVerb::kPost);
+
+ m_Router.RegisterRoute(
+ "trace/stop",
+ [this](HttpRouterRequest& Req) {
+ if (!IsTracing())
+ {
+ return Req.ServerRequest().WriteResponse(HttpResponseCode::BadRequest, HttpContentType::kText, "Tracing is not enabled"sv);
+ }
+ if (TraceStop())
+ {
+ return Req.ServerRequest().WriteResponse(HttpResponseCode::OK, HttpContentType::kText, "Tracing stopped");
+ }
+ else
+ {
+ return Req.ServerRequest().WriteResponse(HttpResponseCode::InternalServerError,
+ HttpContentType::kText,
+ "Failed stopping trace");
+ }
+ },
+ HttpVerb::kPost);
+#endif // ZEN_WITH_TRACE
}
HttpAdminService::~HttpAdminService()