///|
pub(all) struct BatchMetrics {
total : Int
succeeded : Int
failed : Int
total_svg_bytes : Int
average_svg_bytes : Int
} derive(Debug, Eq, ToJson)
///|
pub fn BatchMetrics::empty(total : Int) -> BatchMetrics {
{
total,
succeeded: 0,
failed: total,
total_svg_bytes: 0,
average_svg_bytes: 0,
}
}
///|
pub fn render_batch_with_metrics(
batch : BatchJob,
) -> Result[(Array[RenderedPoster], BatchMetrics), ConfigError] {
match validate_batch(batch) {
Err(error) => Err(error)
Ok(_) => {
let posters : Array[RenderedPoster] = []
let mut bytes = 0
batch.jobs.each(job => {
match render_job(job) {
Ok(poster) => {
bytes = bytes + poster.svg.length()
posters.push(poster)
}
Err(_) => ()
}
})
let total = batch.jobs.length()
let succeeded = posters.length()
let failed = total - succeeded
Ok(
(
posters,
{
total,
succeeded,
failed,
total_svg_bytes: bytes,
average_svg_bytes: if succeeded == 0 {
0
} else {
bytes / succeeded
},
},
),
)
}
}
}