rustypipe/codegen/src/main.rs

105 lines
3.3 KiB
Rust

#![warn(clippy::todo)]
mod abtest;
mod collect_album_types;
mod collect_large_numbers;
mod collect_playlist_dates;
mod collect_video_dates;
mod collect_video_durations;
mod download_testfiles;
mod gen_dictionary;
mod gen_locales;
mod model;
mod util;
use clap::{Parser, Subcommand};
#[derive(Parser)]
struct Cli {
#[clap(subcommand)]
command: Commands,
#[clap(short, default_value = "8")]
concurrency: usize,
}
#[derive(Subcommand)]
enum Commands {
CollectPlaylistDates,
CollectLargeNumbers,
CollectAlbumTypes,
CollectVideoDurations,
CollectVideoDates,
ParsePlaylistDates,
ParseLargeNumbers,
ParseAlbumTypes,
ParseVideoDurations,
GenLocales,
GenDict,
DownloadTestfiles,
AbTest {
#[clap(value_parser)]
id: Option<u16>,
#[clap(short, default_value = "100")]
n: usize,
},
}
#[tokio::main]
async fn main() {
tracing_subscriber::fmt::init();
let cli = Cli::parse();
match cli.command {
Commands::CollectPlaylistDates => {
collect_playlist_dates::collect_dates(cli.concurrency).await;
}
Commands::CollectLargeNumbers => {
collect_large_numbers::collect_large_numbers(cli.concurrency).await;
}
Commands::CollectAlbumTypes => {
collect_album_types::collect_album_types(cli.concurrency).await;
}
Commands::CollectVideoDurations => {
collect_video_durations::collect_video_durations(cli.concurrency).await;
}
Commands::CollectVideoDates => {
collect_video_dates::collect_video_dates(cli.concurrency).await;
}
Commands::ParsePlaylistDates => collect_playlist_dates::write_samples_to_dict(),
Commands::ParseLargeNumbers => collect_large_numbers::write_samples_to_dict(),
Commands::ParseAlbumTypes => collect_album_types::write_samples_to_dict(),
Commands::ParseVideoDurations => collect_video_durations::parse_video_durations(),
Commands::GenLocales => {
gen_locales::generate_locales().await;
}
Commands::GenDict => gen_dictionary::generate_dictionary(),
Commands::DownloadTestfiles => download_testfiles::download_testfiles().await,
Commands::AbTest { id, n } => {
match id {
Some(id) => {
let ab = abtest::ABTest::try_from(id).expect("invalid A/B test id");
let (occurrences, vd_present, vd_absent) =
abtest::run_test(ab, n, cli.concurrency).await;
eprintln!(
"{}/{} occurences ({:.1}%)",
occurrences,
n,
occurrences as f32 / n as f32 * 100.0
);
eprintln!(
"visitor_data (present): {}",
vd_present.as_deref().unwrap_or("n/a")
);
eprintln!(
"visitor_data (absent): {}",
vd_absent.as_deref().unwrap_or("n/a")
);
}
None => {
let res = abtest::run_all_tests(n, cli.concurrency).await;
println!("{}", serde_json::to_string_pretty(&res).unwrap());
}
};
}
};
}