Fix Tokio runtime panic when opening log stream
This commit is contained in:
parent
100397f028
commit
c7049d5eb2
2 changed files with 12 additions and 4 deletions
13
src/app.rs
13
src/app.rs
|
|
@ -130,6 +130,7 @@ impl LogViewer {
|
|||
pub struct App {
|
||||
pub session: SshSession,
|
||||
pub config: Config,
|
||||
pub runtime: tokio::runtime::Handle,
|
||||
pub logs: Vec<LogSource>,
|
||||
pub filtered_indices: Vec<usize>,
|
||||
pub selected_index: usize,
|
||||
|
|
@ -143,10 +144,11 @@ pub struct App {
|
|||
}
|
||||
|
||||
impl App {
|
||||
pub fn new(session: SshSession, config: Config) -> Self {
|
||||
pub fn new(session: SshSession, config: Config, runtime: tokio::runtime::Handle) -> Self {
|
||||
Self {
|
||||
session,
|
||||
config,
|
||||
runtime,
|
||||
logs: Vec::new(),
|
||||
filtered_indices: Vec::new(),
|
||||
selected_index: 0,
|
||||
|
|
@ -232,7 +234,11 @@ impl App {
|
|||
let Some(source) = self.selected_log().cloned() else {
|
||||
return Ok(());
|
||||
};
|
||||
let rx = start_stream(&self.session, &source, 1000)?;
|
||||
let session = self.session.clone();
|
||||
let stream_source = source.clone();
|
||||
let rx = self.runtime.block_on(async move {
|
||||
start_stream(&session, &stream_source, 1000)
|
||||
})?;
|
||||
self.viewer = Some(LogViewer::new(source, rx, self.config.max_log_lines));
|
||||
self.screen = Screen::Viewer;
|
||||
self.message = None;
|
||||
|
|
@ -355,7 +361,8 @@ mod tests {
|
|||
#[test]
|
||||
fn test_app_filter() {
|
||||
let session = SshSession::new("ssh".into(), crate::ssh::SshTarget { args: vec!["host".into()] });
|
||||
let mut app = App::new(session, Config::default());
|
||||
let rt = tokio::runtime::Runtime::new().unwrap();
|
||||
let mut app = App::new(session, Config::default(), rt.handle().clone());
|
||||
app.logs = vec![
|
||||
LogSource::File { path: "/var/log/syslog".into() },
|
||||
LogSource::File { path: "/opt/app/app.log".into() },
|
||||
|
|
|
|||
|
|
@ -74,9 +74,10 @@ fn main() -> io::Result<()> {
|
|||
let session = SshSession::new(config.ssh_command.clone(), target);
|
||||
|
||||
let rt = Runtime::new()?;
|
||||
let runtime_handle = rt.handle().clone();
|
||||
|
||||
// Run discovery before entering TUI
|
||||
let mut app = App::new(session, config);
|
||||
let mut app = App::new(session, config, runtime_handle);
|
||||
rt.block_on(app.discover());
|
||||
|
||||
enable_raw_mode()?;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue