Skip to content

Commit 406daf7

Browse files
committed
webui: make log level temporarily
1 parent f8d8810 commit 406daf7

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

plugin/smartdns-ui/src/http_server_stream.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ use std::time::Duration;
2424
use tokio::time::{interval_at, Instant};
2525
use tokio_fd::AsyncFd;
2626

27+
use crate::smartdns::*;
2728
use hyper_tungstenite::{tungstenite, HyperWebsocket};
2829
use nix::errno::Errno;
2930
use nix::libc::*;
@@ -41,6 +42,23 @@ type Error = Box<dyn std::error::Error + Send + Sync + 'static>;
4142
const LOG_CONTROL_MESSAGE_TYPE: u8 = 1;
4243
const LOG_CONTROL_PAUSE: u8 = 1;
4344
const LOG_CONTROL_RESUME: u8 = 2;
45+
const LOG_CONTROL_LOGLEVEL: u8 = 3;
46+
47+
struct LogLevelGuard {
48+
old_log_level: LogLevel,
49+
}
50+
51+
impl Drop for LogLevelGuard {
52+
fn drop(&mut self) {
53+
dns_log_set_level(self.old_log_level);
54+
}
55+
}
56+
impl LogLevelGuard {
57+
fn new() -> Self {
58+
let old_log_level = dns_log_get_level();
59+
LogLevelGuard { old_log_level }
60+
}
61+
}
4462

4563
pub async fn serve_log_stream(
4664
http_server: Arc<HttpServer>,
@@ -51,6 +69,9 @@ pub async fn serve_log_stream(
5169

5270
let data_server = http_server.get_data_server();
5371
let mut log_stream = data_server.get_log_stream().await;
72+
73+
let _log_guard = LogLevelGuard::new();
74+
5475
loop {
5576
tokio::select! {
5677
msg = log_stream.recv() => {
@@ -99,6 +120,33 @@ pub async fn serve_log_stream(
99120
is_pause = false;
100121
continue;
101122
}
123+
LOG_CONTROL_LOGLEVEL => {
124+
if msg.len() < 6 {
125+
continue;
126+
}
127+
128+
let level_msg = &msg[2..2 + msg.len() - 2];
129+
let str_log_level = std::str::from_utf8(level_msg);
130+
if str_log_level.is_err() {
131+
continue;
132+
}
133+
134+
let str_log_level = str_log_level.unwrap();
135+
if str_log_level.len() == 0 {
136+
continue;
137+
}
138+
139+
let str_log_level = str_log_level.to_lowercase();
140+
let str_log_level = str_log_level.as_str();
141+
142+
let log_level = str_log_level.try_into();
143+
if log_level.is_err() {
144+
continue;
145+
}
146+
147+
let log_level = log_level.unwrap();
148+
dns_log_set_level(log_level);
149+
}
102150
_ => {
103151
continue;
104152
}

0 commit comments

Comments
 (0)