qlty_cloud/export/
analysis.rs1use crate::format::{GzFormatter, JsonEachRowFormatter, JsonFormatter};
2use anyhow::Result;
3use qlty_analysis::Report;
4use std::path::{Path, PathBuf};
5use tracing::info;
6
7#[derive(Default, Debug)]
8pub struct AnalysisExport {
9 pub report: Report,
10 pub path: PathBuf,
11 pub gzip: bool,
12}
13
14impl AnalysisExport {
15 pub fn new(report: &Report, path: &Path, gzip: bool) -> Self {
16 Self {
17 report: report.clone(),
18 path: path.to_path_buf(),
19 gzip,
20 }
21 }
22
23 pub fn export(&self) -> Result<()> {
24 info!("Exporting analysis to: {}", self.path.display());
25 std::fs::create_dir_all(&self.path)?;
26
27 if self.gzip {
28 self.export_json_gz()
29 } else {
30 self.export_json()
31 }
32 }
33
34 fn export_json(&self) -> Result<()> {
35 JsonFormatter::new(self.report.metadata.clone())
36 .write_to_file(&self.path.join("metadata.json"))?;
37
38 JsonEachRowFormatter::new(self.report.messages.clone())
39 .write_to_file(&self.path.join("messages.jsonl"))?;
40
41 JsonEachRowFormatter::new(self.report.invocations.clone())
42 .write_to_file(&self.path.join("invocations.jsonl"))?;
43
44 JsonEachRowFormatter::new(self.report.issues.clone())
45 .write_to_file(&self.path.join("issues.jsonl"))?;
46
47 JsonEachRowFormatter::new(self.report.stats.clone())
48 .write_to_file(&self.path.join("stats.jsonl"))
49 }
50
51 fn export_json_gz(&self) -> Result<()> {
52 JsonFormatter::new(self.report.metadata.clone())
53 .write_to_file(&self.path.join("metadata.json"))?;
54
55 GzFormatter::new(JsonEachRowFormatter::new(self.report.messages.clone()))
56 .write_to_file(&self.path.join("messages.json.gz"))?;
57
58 GzFormatter::new(JsonEachRowFormatter::new(self.report.invocations.clone()))
59 .write_to_file(&self.path.join("invocations.json.gz"))?;
60
61 GzFormatter::new(JsonEachRowFormatter::new(self.report.issues.clone()))
62 .write_to_file(&self.path.join("issues.json.gz"))?;
63
64 GzFormatter::new(JsonEachRowFormatter::new(self.report.stats.clone()))
65 .write_to_file(&self.path.join("stats.json.gz"))
66 }
67}