split stderr/stdout into smaller chunks in websocket
Dependencies
- [2]
D4SBRY6KInitial patch - [3]
JSRKEVVPDependencies upgrade - [4]
YYJ76Q7VInitial attempt at CI/CD - [5]
BTSWJ4D6Correctly updating remote_stdout/remote_stderr - [6]
NRBML6UEUpdating ssh + debug - [7]
W4LOGDLDRemoving locks when deploying - [8]
X7GJK2QDUpdate - [9]
AYSCI4QTDon't cut the logs on blank lines
Change contents
- replacement in geolite2.nix at line 8
hash = "sha256-GtQcO5i29L38HL4vE+9P5nGI2mW1+PSaEhp18mJNmXU=";hash = "sha256-YTzCCpRfaMvVeszKigjqTePaDySZzhVv2POyfW1iXyU="; - replacement in api/src/replication.rs at line 447
let n = if let Some(line) = line ?{let n = if let Some(line) = line? { - replacement in api/src/jobs.rs at line 19
use tokio::io::{AsyncReadExt, AsyncSeekExt};use tokio::io::{AsyncBufReadExt, AsyncReadExt, AsyncSeekExt, BufReader}; - replacement in api/src/jobs.rs at line 167
if let Some((a, b, c)) = send_all(&config, id, &mut remote_stdout, &mut remote_stderr).await.unwrap(){socket.send(a.into()).await.unwrap_or(());socket.send(b.into()).await.unwrap_or(());if let Some(c) = c {socket.send(c.into()).await.unwrap_or(());}}send_all(&config,id,&mut remote_stdout,&mut remote_stderr,&mut socket,).await.unwrap(); - replacement in api/src/jobs.rs at line 258
) -> Result<Option<(String, String, Option<String>)>, crate::Error> {socket: &mut WebSocket,) -> Result<(), crate::Error> { - replacement in api/src/jobs.rs at line 271
let mut stdout = String::new();let mut stderr = String::new();debug!("send_all {:?} {:?}", stdout.len(), stderr.len());if let Some(ref path) = config.ci.filesystem {let mut outf = tokio::fs::File::open(&path.join(&format!("{}.stdout", id)))if let Some(ended) = ended {socket.send(serde_json::to_string(&Msg::Status { ended, status }).unwrap().into(),) - replacement in api/src/jobs.rs at line 280
let mut errf = tokio::fs::File::open(&path.join(&format!("{}.stderr", id)))}let Some(ref path) = config.ci.filesystem else {return Ok(());};let mut outf = BufReader::new(tokio::fs::File::open(&path.join(&format!("{}.stdout", id))) - replacement in api/src/jobs.rs at line 288
.unwrap();outf.seek(std::io::SeekFrom::Start(*remote_stdout as u64)).await?;errf.seek(std::io::SeekFrom::Start(*remote_stderr as u64)).await?;outf.read_to_string(&mut stdout).await?;errf.read_to_string(&mut stderr).await?;.unwrap(),);outf.seek(std::io::SeekFrom::Start(*remote_stdout as u64)).await?;let mut buf = String::with_capacity(8192);while let Ok(n) = outf.read_line(&mut buf).await {*remote_stdout += n;if buf.len() >= 4096 || n == 0 {socket.send(serde_json::to_string(&Msg::Chunk {channel: 0,offset: 0,content: &buf,}).unwrap().into(),).await.unwrap();buf.clear()}if n == 0 {break;} - replacement in api/src/jobs.rs at line 315
*remote_stdout = stdout.len();*remote_stderr = stderr.len();Ok(Some((serde_json::to_string(&Msg::Chunk {channel: 0,offset: 0,content: &stdout,}).unwrap(),serde_json::to_string(&Msg::Chunk {channel: 1,offset: 0,content: &stderr,}).unwrap(),ended.map(|ended| serde_json::to_string(&Msg::Status { ended, status }).unwrap()),)))} else {Ok(None)buf.clear();let mut errf = BufReader::new(tokio::fs::File::open(&path.join(&format!("{}.stderr", id))).await.unwrap(),);errf.seek(std::io::SeekFrom::Start(*remote_stderr as u64)).await?;while let Ok(n) = errf.read_line(&mut buf).await {*remote_stderr += n;if buf.len() >= 4096 || n == 0 {socket.send(serde_json::to_string(&Msg::Chunk {channel: 1,offset: 0,content: &buf,}).unwrap().into(),).await.unwrap();buf.clear()}if n == 0 {break;}} - edit in api/src/jobs.rs at line 345
Ok(())