///|
pub(all) struct BurnReport {
window : RequestWindow
allowed_error_bp : Int
observed_error_bp : Int
burn_rate_x100 : Int
} derive(Eq, Debug)
///|
pub fn calculate_burn_rate(
target : SloTarget,
window : RequestWindow,
) -> BurnReport {
let allowed = target.allowed_error_bp()
let observed = window.error_bp()
{
window,
allowed_error_bp: allowed,
observed_error_bp: observed,
burn_rate_x100: if allowed <= 0 {
if observed > 0 {
1_000_000
} else {
0
}
} else {
observed * 100 / allowed
},
}
}
///|
pub fn BurnReport::rate_label(self : BurnReport) -> String {
"\{self.burn_rate_x100 / 100}.\{two_digits(self.burn_rate_x100 % 100)}x"
}
///|
fn two_digits(value : Int) -> String {
if value < 10 {
"0\{value}"
} else {
value.to_string()
}
}