commit 32fe95d298de559e84aefab3b9a4c3f437e8bf84 Author: JuliusHerrmann Date: Wed Oct 18 22:15:04 2023 +0200 initial diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..557494b --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/target +credentials* +pass diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..1ddd06c --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "exporter" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +rocket = "=0.5.0-rc.3" +rs-ansible = { git = "https://github.com/snowlaboratories/rs-ansible.git" } diff --git a/src/extra_vars_prod.yml b/src/extra_vars_prod.yml new file mode 100644 index 0000000..ba26b5c --- /dev/null +++ b/src/extra_vars_prod.yml @@ -0,0 +1 @@ +deploy_production: true diff --git a/src/extra_vars_testing.yml b/src/extra_vars_testing.yml new file mode 100644 index 0000000..538ded2 --- /dev/null +++ b/src/extra_vars_testing.yml @@ -0,0 +1 @@ +deploy_production: false diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..2534580 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,73 @@ +use rs_ansible::*; +use std::process::Output; +use std::str; + +#[macro_use] extern crate rocket; + +fn get_result(production: bool) -> Output { + let conn_opts = AnsibleConnectionOptions { + ask_pass: false, + ..Default::default() + }; + + let mut extra_vars_file = vec!["@credentials.yml".into()]; + + if production { + extra_vars_file.push("@src/extra_vars_prod.yml".into()); + } else { + extra_vars_file.push("@src/extra_vars_testing.yml".into()); + } + + let playbook_opts = AnsiblePlaybookOptions { + inventory: "../deployment/inventory/".into(), + extra_vars_file, + vault_password_file: "pass".into(), + ..Default::default() + }; + + let playbook= AnsiblePlaybookCmd { + playbooks: vec!["../deployment/playbook_o5gc_test.yml".into()], + options: playbook_opts, + connection_options: conn_opts, + ..Default::default() + }; + + let output = match playbook.run() { + Ok(child) => child.wait_with_output(), + Err(err) => panic!("Err: {}", err), + }; + output.unwrap() +} + +#[get("/metrics")] +fn hello() -> String { + let result_prod = get_result(true); + let result_testing = get_result(false); + + println!("Done running ansible playbooks"); + println!("{}", str::from_utf8(&result_prod.stdout).unwrap()); + + format!("# HELP o5gc_connection_test_status Status code of the ue connection test +# TYPE o5gc_connection_test_status gauge +o5gc_connection_test_status{{production=\"true\"}} {} +o5gc_connection_test_status{{production=\"false\"}} {}" + , result_prod.status, result_testing.status + ) +} + +// format!(" +// # HELP o5gc_connection_test_status Status code of the ue connection test +// # TYPE o5gc_connection_test_status gauge +// o5gc_connection_test_status {} +// # HELP o5gc_connection_test_stdout stdout the ue connection test +// # TYPE o5gc_connection_test_stdout untyped +// o5gc_connection_test_stdout {} +// # HELP o5gc_connection_test_stderr stderr the ue connection test +// # TYPE o5gc_connection_test_stderr untyped +// o5gc_connection_test_stderr {} +// ", out.status, str::from_utf8(&out.stdout).unwrap(), str::from_utf8(&out.stderr).unwrap()) + +#[launch] +fn rocket() -> _ { + rocket::build().mount("/", routes![hello]) +}