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