WIP coredump json upload

I need @paultag or someone to help guide me through passing the coredump around properly.
This commit is contained in:
Dan Shaw
2024-05-29 22:42:11 -07:00
parent 313e586510
commit 62302ccfda

View File

@ -65,32 +65,30 @@ pub trait CoreDump: Clone {
} }
/// Gather coredump and upload it to *public* cloud storage. /// Gather coredump and upload it to *public* cloud storage.
async fn upload_coredump(&self) -> Result<String> { async fn upload_coredump(&self, core_dump_info: &CoreDumpInfo) -> Result<String> {
let screenshot = self.screenshot().await?; // (Re)Create the zoo client.
let cleaned = screenshot.trim_start_matches("data:image/png;base64,");
// Create the zoo client.
let mut zoo = kittycad::Client::new(self.token()?); let mut zoo = kittycad::Client::new(self.token()?);
zoo.set_base_url(&self.base_api_url()?); zoo.set_base_url(&self.base_api_url()?);
// Base64 decode the screenshot. let json = serde_json::to_string_pretty(&core_dump_info).unwrap();
let data = base64::engine::general_purpose::STANDARD.decode(cleaned)?;
// Upload the screenshot. // Upload the coredump.
let links = zoo let result: Vec<String> = zoo
.meta() .meta()
.create_debug_uploads(vec![kittycad::types::multipart::Attachment { .create_debug_uploads(vec![kittycad::types::multipart::Attachment {
name: "".to_string(), name: "".to_string(),
filename: Some("modeling-app/core-dump-screenshot.png".to_string()), filename: Some(format!(r#"modeling-app/coredump-{}.json)"#, core_dump_info.id,)),
content_type: Some("file/json".to_string()), content_type: Some("application/json".to_string()),
data, data: json.to_vec(),
}]) }])
.await .await?;
.map_err(|e| anyhow::anyhow!(e.to_string()))?;
if links.is_empty() { if result.is_empty() {
anyhow::bail!("Failed to upload screenshot"); anyhow::bail!("Failed to upload coredump");
} }
Ok(links[0].clone()) println!("{:?}", result);
Ok(result[0].clone())
} }
/// Dump the app info. /// Dump the app info.
@ -112,8 +110,8 @@ pub trait CoreDump: Clone {
pool: self.pool()?, pool: self.pool()?,
client_state, client_state,
}; };
let coredump_url = screenshot_url.clone(); let coredump_url: String = self.upload_coredump(&core_dump_info).await?;
core_dump_info.set_github_issue_url(&screenshot_url, &coredump_url)?; core_dump_info.set_github_issue_url(&screenshot_url, &coredump_url)?;
@ -171,8 +169,7 @@ impl CoreDumpInfo {
![Coredump]({}) ![Coredump]({})
"#, "#,
screenshot_url, screenshot_url, coredump_url
coredump_url
); );
let urlencoded: String = form_urlencoded::byte_serialize(body.as_bytes()).collect(); let urlencoded: String = form_urlencoded::byte_serialize(body.as_bytes()).collect();