///|
pub(all) struct ReadinessItem {
name : String
passed : Bool
detail : String
} derive(Eq, Debug)
///|
pub fn readiness_check(archive : HarArchive) -> Array[ReadinessItem] {
let summary = analyze_archive(archive)
let diagnostics = validate_archive(archive)
[
ReadinessItem::{
name: "has entries",
passed: summary.entry_count > 0,
detail: summary.entry_count.to_string() + " entries",
},
ReadinessItem::{
name: "has creator",
passed: archive.log.creator_name != "",
detail: archive.log.creator_name,
},
ReadinessItem::{
name: "no validation errors",
passed: diagnostics.count_if(d => d.severity == Error) == 0,
detail: diagnostics.length().to_string() + " findings",
},
ReadinessItem::{
name: "no failed requests",
passed: summary.failed_count == 0,
detail: summary.failed_count.to_string() + " failed",
},
ReadinessItem::{
name: "has resource classification",
passed: summary.resources.length() > 0,
detail: summary.resources.length().to_string() + " groups",
},
]
}
///|
pub fn readiness_passed(items : Array[ReadinessItem]) -> Bool {
items.all(item => item.passed)
}
///|
pub fn render_readiness(items : Array[ReadinessItem]) -> String {
let mut out = ""
for i = 0; i < items.length(); i = i + 1 {
let item = items[i]
let mark = if item.passed { "[x] " } else { "[ ] " }
out = out + mark + item.name + " - " + item.detail + "\n"
}
out
}
///|
pub fn failed_readiness_items(
items : Array[ReadinessItem],
) -> Array[ReadinessItem] {
let out : Array[ReadinessItem] = []
for i = 0; i < items.length(); i = i + 1 {
if !items[i].passed {
out.push(items[i])
}
}
out
}
///|
pub fn readiness_summary(archive : HarArchive) -> String {
let items = readiness_check(archive)
if readiness_passed(items) {
"ready\n" + render_readiness(items)
} else {
"not ready\n" + render_readiness(items)
}
}