feat: freeze typed metrics registry and bounded exemplars
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
use std::{fs, process::ExitCode};
|
||||
|
||||
const SNAPSHOT: &str = "docs/schemas/metrics-registry-v1.json";
|
||||
|
||||
fn main() -> ExitCode {
|
||||
let rendered = match crank_metrics::render_metric_schema_json() {
|
||||
Ok(rendered) => rendered,
|
||||
Err(_) => {
|
||||
eprintln!("metrics_contract_invalid");
|
||||
return ExitCode::FAILURE;
|
||||
}
|
||||
};
|
||||
let args = std::env::args().skip(1).collect::<Vec<_>>();
|
||||
if args.is_empty() {
|
||||
print!("{rendered}");
|
||||
return ExitCode::SUCCESS;
|
||||
}
|
||||
if args.as_slice() != ["--check"] {
|
||||
eprintln!("metrics_contract_invalid_command");
|
||||
return ExitCode::FAILURE;
|
||||
}
|
||||
match fs::read_to_string(SNAPSHOT) {
|
||||
Ok(snapshot) if snapshot == rendered => {
|
||||
println!("metrics_contract_ok schema_version=1");
|
||||
ExitCode::SUCCESS
|
||||
}
|
||||
Ok(_) => {
|
||||
eprintln!("metrics_contract_drift");
|
||||
ExitCode::FAILURE
|
||||
}
|
||||
Err(_) => {
|
||||
eprintln!("metrics_contract_missing");
|
||||
ExitCode::FAILURE
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user