feat(config): add serialization interval configuration (#2923)
* add serialization interval configuration * fix e2e tests * fix e2e tests
This commit is contained in:
parent
e55cd36b53
commit
3b4a355f0d
15 changed files with 50 additions and 8 deletions
|
|
@ -92,7 +92,7 @@ fn start_zellij_mirrored_session(channel: &mut ssh2::Channel) {
|
||||||
channel
|
channel
|
||||||
.write_all(
|
.write_all(
|
||||||
format!(
|
format!(
|
||||||
"{} {} --session {} --data-dir {} options --mirror-session true\n",
|
"{} {} --session {} --data-dir {} options --mirror-session true --serialization-interval 1\n",
|
||||||
SET_ENV_VARIABLES, ZELLIJ_EXECUTABLE_LOCATION, SESSION_NAME, ZELLIJ_DATA_DIR
|
SET_ENV_VARIABLES, ZELLIJ_EXECUTABLE_LOCATION, SESSION_NAME, ZELLIJ_DATA_DIR
|
||||||
)
|
)
|
||||||
.as_bytes(),
|
.as_bytes(),
|
||||||
|
|
@ -107,7 +107,7 @@ fn start_zellij_mirrored_session_with_layout(channel: &mut ssh2::Channel, layout
|
||||||
channel
|
channel
|
||||||
.write_all(
|
.write_all(
|
||||||
format!(
|
format!(
|
||||||
"{} {} --session {} --data-dir {} --layout {} options --mirror-session true\n",
|
"{} {} --session {} --data-dir {} --layout {} options --mirror-session true --serialization-interval 1\n",
|
||||||
SET_ENV_VARIABLES,
|
SET_ENV_VARIABLES,
|
||||||
ZELLIJ_EXECUTABLE_LOCATION,
|
ZELLIJ_EXECUTABLE_LOCATION,
|
||||||
SESSION_NAME,
|
SESSION_NAME,
|
||||||
|
|
@ -129,7 +129,7 @@ fn start_zellij_mirrored_session_with_layout_and_viewport_serialization(
|
||||||
channel
|
channel
|
||||||
.write_all(
|
.write_all(
|
||||||
format!(
|
format!(
|
||||||
"{} {} --session {} --data-dir {} --layout {} options --mirror-session true --serialize-pane-viewport true\n",
|
"{} {} --session {} --data-dir {} --layout {} options --mirror-session true --serialize-pane-viewport true --serialization-interval 1\n",
|
||||||
SET_ENV_VARIABLES,
|
SET_ENV_VARIABLES,
|
||||||
ZELLIJ_EXECUTABLE_LOCATION,
|
ZELLIJ_EXECUTABLE_LOCATION,
|
||||||
SESSION_NAME,
|
SESSION_NAME,
|
||||||
|
|
|
||||||
|
|
@ -78,15 +78,20 @@ impl From<&BackgroundJob> for BackgroundJobContext {
|
||||||
|
|
||||||
static FLASH_DURATION_MS: u64 = 1000;
|
static FLASH_DURATION_MS: u64 = 1000;
|
||||||
static PLUGIN_ANIMATION_OFFSET_DURATION_MD: u64 = 500;
|
static PLUGIN_ANIMATION_OFFSET_DURATION_MD: u64 = 500;
|
||||||
static SESSION_READ_DURATION: u64 = 1000;
|
static SESSION_READ_DURATION: u64 = 60000;
|
||||||
|
|
||||||
pub(crate) fn background_jobs_main(bus: Bus<BackgroundJob>) -> Result<()> {
|
pub(crate) fn background_jobs_main(
|
||||||
|
bus: Bus<BackgroundJob>,
|
||||||
|
serialization_interval: Option<u64>,
|
||||||
|
) -> Result<()> {
|
||||||
let err_context = || "failed to write to pty".to_string();
|
let err_context = || "failed to write to pty".to_string();
|
||||||
let mut running_jobs: HashMap<BackgroundJob, Instant> = HashMap::new();
|
let mut running_jobs: HashMap<BackgroundJob, Instant> = HashMap::new();
|
||||||
let mut loading_plugins: HashMap<u32, Arc<AtomicBool>> = HashMap::new(); // u32 - plugin_id
|
let mut loading_plugins: HashMap<u32, Arc<AtomicBool>> = HashMap::new(); // u32 - plugin_id
|
||||||
let current_session_name = Arc::new(Mutex::new(String::default()));
|
let current_session_name = Arc::new(Mutex::new(String::default()));
|
||||||
let current_session_info = Arc::new(Mutex::new(SessionInfo::default()));
|
let current_session_info = Arc::new(Mutex::new(SessionInfo::default()));
|
||||||
let current_session_layout = Arc::new(Mutex::new((String::new(), BTreeMap::new())));
|
let current_session_layout = Arc::new(Mutex::new((String::new(), BTreeMap::new())));
|
||||||
|
let serialization_interval = serialization_interval.map(|s| s * 1000); // convert to
|
||||||
|
// milliseconds
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let (event, mut err_ctx) = bus.recv().with_context(err_context)?;
|
let (event, mut err_ctx) = bus.recv().with_context(err_context)?;
|
||||||
|
|
@ -181,8 +186,10 @@ pub(crate) fn background_jobs_main(bus: Bus<BackgroundJob>) -> Result<()> {
|
||||||
resurrectable_sessions,
|
resurrectable_sessions,
|
||||||
));
|
));
|
||||||
let _ = senders.send_to_screen(ScreenInstruction::DumpLayoutToHd);
|
let _ = senders.send_to_screen(ScreenInstruction::DumpLayoutToHd);
|
||||||
task::sleep(std::time::Duration::from_millis(SESSION_READ_DURATION))
|
task::sleep(std::time::Duration::from_millis(
|
||||||
.await;
|
serialization_interval.unwrap_or(SESSION_READ_DURATION),
|
||||||
|
))
|
||||||
|
.await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -751,6 +751,8 @@ fn init_session(
|
||||||
arrow_fonts: config_options.simplified_ui.unwrap_or_default(),
|
arrow_fonts: config_options.simplified_ui.unwrap_or_default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let serialization_interval = config_options.serialization_interval;
|
||||||
|
|
||||||
let default_shell = config_options.default_shell.clone().map(|command| {
|
let default_shell = config_options.default_shell.clone().map(|command| {
|
||||||
TerminalAction::RunCommand(RunCommand {
|
TerminalAction::RunCommand(RunCommand {
|
||||||
command,
|
command,
|
||||||
|
|
@ -885,7 +887,7 @@ fn init_session(
|
||||||
None,
|
None,
|
||||||
Some(os_input.clone()),
|
Some(os_input.clone()),
|
||||||
);
|
);
|
||||||
|| background_jobs_main(background_jobs_bus).fatal()
|
move || background_jobs_main(background_jobs_bus, serialization_interval).fatal()
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -147,6 +147,10 @@ pub struct Options {
|
||||||
#[clap(long, value_parser)]
|
#[clap(long, value_parser)]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub styled_underlines: Option<bool>,
|
pub styled_underlines: Option<bool>,
|
||||||
|
|
||||||
|
/// The interval at which to serialize sessions for resurrection (in seconds)
|
||||||
|
#[clap(long, value_parser)]
|
||||||
|
pub serialization_interval: Option<u64>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(ArgEnum, Deserialize, Serialize, Debug, Clone, Copy, PartialEq)]
|
#[derive(ArgEnum, Deserialize, Serialize, Debug, Clone, Copy, PartialEq)]
|
||||||
|
|
@ -218,6 +222,7 @@ impl Options {
|
||||||
.scrollback_lines_to_serialize
|
.scrollback_lines_to_serialize
|
||||||
.or(self.scrollback_lines_to_serialize);
|
.or(self.scrollback_lines_to_serialize);
|
||||||
let styled_underlines = other.styled_underlines.or(self.styled_underlines);
|
let styled_underlines = other.styled_underlines.or(self.styled_underlines);
|
||||||
|
let serialization_interval = other.serialization_interval.or(self.serialization_interval);
|
||||||
|
|
||||||
Options {
|
Options {
|
||||||
simplified_ui,
|
simplified_ui,
|
||||||
|
|
@ -244,6 +249,7 @@ impl Options {
|
||||||
serialize_pane_viewport,
|
serialize_pane_viewport,
|
||||||
scrollback_lines_to_serialize,
|
scrollback_lines_to_serialize,
|
||||||
styled_underlines,
|
styled_underlines,
|
||||||
|
serialization_interval,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -295,6 +301,7 @@ impl Options {
|
||||||
.scrollback_lines_to_serialize
|
.scrollback_lines_to_serialize
|
||||||
.or_else(|| self.scrollback_lines_to_serialize.clone());
|
.or_else(|| self.scrollback_lines_to_serialize.clone());
|
||||||
let styled_underlines = other.styled_underlines.or(self.styled_underlines);
|
let styled_underlines = other.styled_underlines.or(self.styled_underlines);
|
||||||
|
let serialization_interval = other.serialization_interval.or(self.serialization_interval);
|
||||||
|
|
||||||
Options {
|
Options {
|
||||||
simplified_ui,
|
simplified_ui,
|
||||||
|
|
@ -321,6 +328,7 @@ impl Options {
|
||||||
serialize_pane_viewport,
|
serialize_pane_viewport,
|
||||||
scrollback_lines_to_serialize,
|
scrollback_lines_to_serialize,
|
||||||
styled_underlines,
|
styled_underlines,
|
||||||
|
serialization_interval,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -384,6 +392,7 @@ impl From<CliOptions> for Options {
|
||||||
serialize_pane_viewport: opts.serialize_pane_viewport,
|
serialize_pane_viewport: opts.serialize_pane_viewport,
|
||||||
scrollback_lines_to_serialize: opts.scrollback_lines_to_serialize,
|
scrollback_lines_to_serialize: opts.scrollback_lines_to_serialize,
|
||||||
styled_underlines: opts.styled_underlines,
|
styled_underlines: opts.styled_underlines,
|
||||||
|
serialization_interval: opts.serialization_interval,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1480,6 +1480,9 @@ impl Options {
|
||||||
let styled_underlines =
|
let styled_underlines =
|
||||||
kdl_property_first_arg_as_bool_or_error!(kdl_options, "styled_underlines")
|
kdl_property_first_arg_as_bool_or_error!(kdl_options, "styled_underlines")
|
||||||
.map(|(v, _)| v);
|
.map(|(v, _)| v);
|
||||||
|
let serialization_interval =
|
||||||
|
kdl_property_first_arg_as_i64_or_error!(kdl_options, "serialization_interval")
|
||||||
|
.map(|(scroll_buffer_size, _entry)| scroll_buffer_size as u64);
|
||||||
Ok(Options {
|
Ok(Options {
|
||||||
simplified_ui,
|
simplified_ui,
|
||||||
theme,
|
theme,
|
||||||
|
|
@ -1505,6 +1508,7 @@ impl Options {
|
||||||
serialize_pane_viewport,
|
serialize_pane_viewport,
|
||||||
scrollback_lines_to_serialize,
|
scrollback_lines_to_serialize,
|
||||||
styled_underlines,
|
styled_underlines,
|
||||||
|
serialization_interval,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/setup.rs
|
source: zellij-utils/src/setup.rs
|
||||||
|
assertion_line: 686
|
||||||
expression: "format!(\"{:#?}\", options)"
|
expression: "format!(\"{:#?}\", options)"
|
||||||
---
|
---
|
||||||
Options {
|
Options {
|
||||||
|
|
@ -29,4 +30,5 @@ Options {
|
||||||
serialize_pane_viewport: None,
|
serialize_pane_viewport: None,
|
||||||
scrollback_lines_to_serialize: None,
|
scrollback_lines_to_serialize: None,
|
||||||
styled_underlines: None,
|
styled_underlines: None,
|
||||||
|
serialization_interval: None,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/setup.rs
|
source: zellij-utils/src/setup.rs
|
||||||
|
assertion_line: 714
|
||||||
expression: "format!(\"{:#?}\", options)"
|
expression: "format!(\"{:#?}\", options)"
|
||||||
---
|
---
|
||||||
Options {
|
Options {
|
||||||
|
|
@ -29,4 +30,5 @@ Options {
|
||||||
serialize_pane_viewport: None,
|
serialize_pane_viewport: None,
|
||||||
scrollback_lines_to_serialize: None,
|
scrollback_lines_to_serialize: None,
|
||||||
styled_underlines: None,
|
styled_underlines: None,
|
||||||
|
serialization_interval: None,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/setup.rs
|
source: zellij-utils/src/setup.rs
|
||||||
|
assertion_line: 673
|
||||||
expression: "format!(\"{:#?}\", options)"
|
expression: "format!(\"{:#?}\", options)"
|
||||||
---
|
---
|
||||||
Options {
|
Options {
|
||||||
|
|
@ -27,4 +28,5 @@ Options {
|
||||||
serialize_pane_viewport: None,
|
serialize_pane_viewport: None,
|
||||||
scrollback_lines_to_serialize: None,
|
scrollback_lines_to_serialize: None,
|
||||||
styled_underlines: None,
|
styled_underlines: None,
|
||||||
|
serialization_interval: None,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/setup.rs
|
source: zellij-utils/src/setup.rs
|
||||||
|
assertion_line: 671
|
||||||
expression: "format!(\"{:#?}\", config)"
|
expression: "format!(\"{:#?}\", config)"
|
||||||
---
|
---
|
||||||
Config {
|
Config {
|
||||||
|
|
@ -3592,6 +3593,7 @@ Config {
|
||||||
serialize_pane_viewport: None,
|
serialize_pane_viewport: None,
|
||||||
scrollback_lines_to_serialize: None,
|
scrollback_lines_to_serialize: None,
|
||||||
styled_underlines: None,
|
styled_underlines: None,
|
||||||
|
serialization_interval: None,
|
||||||
},
|
},
|
||||||
themes: {},
|
themes: {},
|
||||||
plugins: {
|
plugins: {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/setup.rs
|
source: zellij-utils/src/setup.rs
|
||||||
|
assertion_line: 729
|
||||||
expression: "format!(\"{:#?}\", config)"
|
expression: "format!(\"{:#?}\", config)"
|
||||||
---
|
---
|
||||||
Config {
|
Config {
|
||||||
|
|
@ -3592,6 +3593,7 @@ Config {
|
||||||
serialize_pane_viewport: None,
|
serialize_pane_viewport: None,
|
||||||
scrollback_lines_to_serialize: None,
|
scrollback_lines_to_serialize: None,
|
||||||
styled_underlines: None,
|
styled_underlines: None,
|
||||||
|
serialization_interval: None,
|
||||||
},
|
},
|
||||||
themes: {},
|
themes: {},
|
||||||
plugins: {
|
plugins: {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/setup.rs
|
source: zellij-utils/src/setup.rs
|
||||||
|
assertion_line: 785
|
||||||
expression: "format!(\"{:#?}\", config)"
|
expression: "format!(\"{:#?}\", config)"
|
||||||
---
|
---
|
||||||
Config {
|
Config {
|
||||||
|
|
@ -85,6 +86,7 @@ Config {
|
||||||
serialize_pane_viewport: None,
|
serialize_pane_viewport: None,
|
||||||
scrollback_lines_to_serialize: None,
|
scrollback_lines_to_serialize: None,
|
||||||
styled_underlines: None,
|
styled_underlines: None,
|
||||||
|
serialization_interval: None,
|
||||||
},
|
},
|
||||||
themes: {},
|
themes: {},
|
||||||
plugins: {
|
plugins: {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/setup.rs
|
source: zellij-utils/src/setup.rs
|
||||||
|
assertion_line: 696
|
||||||
expression: "format!(\"{:#?}\", options)"
|
expression: "format!(\"{:#?}\", options)"
|
||||||
---
|
---
|
||||||
Options {
|
Options {
|
||||||
|
|
@ -29,4 +30,5 @@ Options {
|
||||||
serialize_pane_viewport: None,
|
serialize_pane_viewport: None,
|
||||||
scrollback_lines_to_serialize: None,
|
scrollback_lines_to_serialize: None,
|
||||||
styled_underlines: None,
|
styled_underlines: None,
|
||||||
|
serialization_interval: None,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/setup.rs
|
source: zellij-utils/src/setup.rs
|
||||||
|
assertion_line: 757
|
||||||
expression: "format!(\"{:#?}\", config)"
|
expression: "format!(\"{:#?}\", config)"
|
||||||
---
|
---
|
||||||
Config {
|
Config {
|
||||||
|
|
@ -3592,6 +3593,7 @@ Config {
|
||||||
serialize_pane_viewport: None,
|
serialize_pane_viewport: None,
|
||||||
scrollback_lines_to_serialize: None,
|
scrollback_lines_to_serialize: None,
|
||||||
styled_underlines: None,
|
styled_underlines: None,
|
||||||
|
serialization_interval: None,
|
||||||
},
|
},
|
||||||
themes: {},
|
themes: {},
|
||||||
plugins: {
|
plugins: {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/setup.rs
|
source: zellij-utils/src/setup.rs
|
||||||
|
assertion_line: 771
|
||||||
expression: "format!(\"{:#?}\", config)"
|
expression: "format!(\"{:#?}\", config)"
|
||||||
---
|
---
|
||||||
Config {
|
Config {
|
||||||
|
|
@ -3592,6 +3593,7 @@ Config {
|
||||||
serialize_pane_viewport: None,
|
serialize_pane_viewport: None,
|
||||||
scrollback_lines_to_serialize: None,
|
scrollback_lines_to_serialize: None,
|
||||||
styled_underlines: None,
|
styled_underlines: None,
|
||||||
|
serialization_interval: None,
|
||||||
},
|
},
|
||||||
themes: {
|
themes: {
|
||||||
"other-theme-from-config": Theme {
|
"other-theme-from-config": Theme {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
source: zellij-utils/src/setup.rs
|
source: zellij-utils/src/setup.rs
|
||||||
|
assertion_line: 743
|
||||||
expression: "format!(\"{:#?}\", config)"
|
expression: "format!(\"{:#?}\", config)"
|
||||||
---
|
---
|
||||||
Config {
|
Config {
|
||||||
|
|
@ -3592,6 +3593,7 @@ Config {
|
||||||
serialize_pane_viewport: None,
|
serialize_pane_viewport: None,
|
||||||
scrollback_lines_to_serialize: None,
|
scrollback_lines_to_serialize: None,
|
||||||
styled_underlines: None,
|
styled_underlines: None,
|
||||||
|
serialization_interval: None,
|
||||||
},
|
},
|
||||||
themes: {},
|
themes: {},
|
||||||
plugins: {
|
plugins: {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue