This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new d61fec3ff8b (feature)(LOG) Support to change be vlog level dynamically 
using http (#28785)
d61fec3ff8b is described below

commit d61fec3ff8be4749ac8e44779bfdd9642b671a7c
Author: AlexYue <yj976240...@gmail.com>
AuthorDate: Sat Jan 6 20:12:35 2024 +0800

    (feature)(LOG) Support to change be vlog level dynamically using http 
(#28785)
---
 be/src/http/action/adjust_log_level.cpp | 55 +++++++++++++++++++++++++++++++++
 be/src/http/action/adjust_log_level.h   | 37 ++++++++++++++++++++++
 be/src/service/http_service.cpp         |  4 +++
 3 files changed, 96 insertions(+)

diff --git a/be/src/http/action/adjust_log_level.cpp 
b/be/src/http/action/adjust_log_level.cpp
new file mode 100644
index 00000000000..687639a9b58
--- /dev/null
+++ b/be/src/http/action/adjust_log_level.cpp
@@ -0,0 +1,55 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#include <http/action/adjust_log_level.h>
+
+#include "common/logging.h"
+#include "common/status.h"
+#include "http/http_channel.h"
+#include "http/http_request.h"
+
+namespace doris {
+
+// **Note**: If the module_name does not exist in the vlog modules, vlog
+// would create corresponding module for it.
+int handle_request(HttpRequest* req) {
+    auto parse_param = [&req](std::string param) {
+        const auto& value = req->param(param);
+        if (value.empty()) {
+            auto error_msg = fmt::format("parameter {} not specified in url.", 
param);
+            throw std::runtime_error(error_msg);
+        }
+        return value;
+    };
+    const auto& module = parse_param("module");
+    const auto& level = parse_param("level");
+    int new_level = std::stoi(level);
+    return google::SetVLOGLevel(module.c_str(), new_level);
+}
+
+void AdjustLogLevelAction::handle(HttpRequest* req) {
+    try {
+        auto old_level = handle_request(req);
+        auto msg = fmt::format("adjust log level success, origin level is {}", 
old_level);
+        HttpChannel::send_reply(req, msg);
+    } catch (const std::exception& e) {
+        HttpChannel::send_reply(req, HttpStatus::INTERNAL_SERVER_ERROR, 
e.what());
+        LOG(WARNING) << "adjust log level failed, error: " << e.what();
+        return;
+    }
+}
+} // namespace doris
\ No newline at end of file
diff --git a/be/src/http/action/adjust_log_level.h 
b/be/src/http/action/adjust_log_level.h
new file mode 100644
index 00000000000..606d6129a26
--- /dev/null
+++ b/be/src/http/action/adjust_log_level.h
@@ -0,0 +1,37 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#pragma once
+
+#include <string>
+
+#include "common/status.h"
+#include "http/http_handler.h"
+
+namespace doris {
+
+class HttpRequest;
+
+class AdjustLogLevelAction : public HttpHandler {
+public:
+    AdjustLogLevelAction() = default;
+
+    ~AdjustLogLevelAction() override = default;
+
+    void handle(HttpRequest* req) override;
+};
+} // namespace doris
diff --git a/be/src/service/http_service.cpp b/be/src/service/http_service.cpp
index 1423f82225f..6c961959aec 100644
--- a/be/src/service/http_service.cpp
+++ b/be/src/service/http_service.cpp
@@ -26,6 +26,7 @@
 
 #include "common/config.h"
 #include "common/status.h"
+#include "http/action/adjust_log_level.h"
 #include "http/action/check_rpc_channel_action.h"
 #include "http/action/check_tablet_segment_action.h"
 #include "http/action/checksum_action.h"
@@ -158,6 +159,9 @@ Status HttpService::start() {
     _ev_http_server->register_handler(HttpMethod::HEAD, 
"/api/_binlog/_download",
                                       download_binlog_action);
 
+    AdjustLogLevelAction* adjust_log_level_action = _pool.add(new 
AdjustLogLevelAction());
+    _ev_http_server->register_handler(HttpMethod::POST, "api/glog/adjust", 
adjust_log_level_action);
+
     // Register BE version action
     VersionAction* version_action =
             _pool.add(new VersionAction(_env, TPrivilegeHier::GLOBAL, 
TPrivilegeType::NONE));


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to