Orca output dir fix (#737)

This commit is contained in:
James Hodgkinson 2022-05-03 13:24:39 +10:00 committed by GitHub
parent 71f6c193a0
commit da7ae6118c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 51 additions and 4 deletions

1
Cargo.lock generated
View file

@ -2529,6 +2529,7 @@ version = "1.1.0-alpha.8"
dependencies = [ dependencies = [
"crossbeam", "crossbeam",
"csv", "csv",
"dialoguer",
"futures-util", "futures-util",
"jemallocator", "jemallocator",
"kanidm_client", "kanidm_client",

View file

@ -19,4 +19,10 @@ if [ ! -f "/tmp/kanidm/key.pem" ]; then
exit 1 exit 1
fi fi
cargo run --bin kanidmd server -c "${CONFIG_FILE}" COMMAND="server"
if [ -n "${1}" ]; then
COMMAND=$*
fi
#shellcheck disable=SC2086
cargo run --bin kanidmd -- ${COMMAND} -c "${CONFIG_FILE}"

View file

@ -44,5 +44,7 @@ crossbeam = "0.8.1"
mathru = "^0.12.0" mathru = "^0.12.0"
dialoguer = "0.10.0"
[build-dependencies] [build-dependencies]
profiles = { path = "../profiles" } profiles = { path = "../profiles" }

View file

@ -103,7 +103,18 @@ impl std::fmt::Display for TestTypeOpt {
} }
#[derive(Debug, StructOpt)] #[derive(Debug, StructOpt)]
#[structopt(about = "Orca Load Testing Utility")] #[structopt(name="orca", about = "Orca Load Testing Utility
Orca works in a few steps.
1. (Optional) preprocess an anonymised 389-ds access log (created from an external tool) into an orca data set.
Create an orca config which defines the targets you want to be able to setup and load test. See example_profiles/small/orca.toml
2. 'orca setup' the kanidm/389-ds instance from the orca data set. You can see an example of this in example_profiles/small/data.json. This will reset the database, and add tons of entries etc.
3. 'orca run' one of the metrics, based on that data set. For example:
orca run -p example_profiles/small/orca.toml kanidm search-basic
")]
enum OrcaOpt { enum OrcaOpt {
#[structopt(name = "preprocess")] #[structopt(name = "preprocess")]
/// Preprocess a dataset that can be used for testing /// Preprocess a dataset that can be used for testing
@ -112,7 +123,7 @@ enum OrcaOpt {
/// Setup a server as defined by a test profile /// Setup a server as defined by a test profile
Setup(SetupOpt), Setup(SetupOpt),
#[structopt(name = "run")] #[structopt(name = "run")]
/// Run the load test as define by the test profile /// Run the load test as defined by the test profile
Run(RunOpt), Run(RunOpt),
} }

View file

@ -1,7 +1,8 @@
use crate::setup::config; use crate::setup::config;
use crate::{TargetOpt, TestTypeOpt}; use crate::{TargetOpt, TestTypeOpt};
use dialoguer::Confirm;
use std::fs::create_dir_all;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
mod search; mod search;
pub(crate) async fn doit( pub(crate) async fn doit(
@ -21,6 +22,32 @@ pub(crate) async fn doit(
debug!("Profile -> {:?}", profile); debug!("Profile -> {:?}", profile);
let result_path = PathBuf::from(&profile.results); let result_path = PathBuf::from(&profile.results);
if !result_path.exists() {
debug!(
"Couldn't find results directory from profile: {:#?}",
result_path
);
match Confirm::new()
.with_prompt(
format!("I couldn't find the directory you told me to send results to ({:?}). Would you like to create it?",
result_path,)
)
.interact()
{
Ok(_) => match create_dir_all(result_path.as_path()) {
Ok(_) => info!("Successfully created {:#?}", result_path.canonicalize()),
Err(error) => {
error!("{:#?}", error);
return Err(());
}
},
_ => {
println!("Ok, going to quit!");
return Err(());
}
}
}
if !result_path.is_dir() { if !result_path.is_dir() {
error!("Profile: results must be a directory"); error!("Profile: results must be a directory");
return Err(()); return Err(());