what2watch/src/bin/import_imdb.rs
2024-01-15 16:00:24 -08:00

66 lines
1.6 KiB
Rust

use std::{ffi::OsString, time::Duration};
use clap::Parser;
use sqlx::sqlite::{SqliteConnectOptions, SqlitePoolOptions};
use what2watch::{get_db_pool, import_utils::add_imdb_movies};
#[derive(Debug, Parser)]
struct Cli {
#[clap(long, short)]
pub db_path: OsString,
#[clap(
long,
short,
help = "Number of movies to add.",
default_value_t = 10_000
)]
pub number: u32,
}
fn main() {
let cli = Cli::parse();
let path = cli.db_path;
let num = cli.number;
let opts = SqliteConnectOptions::new().filename(path).read_only(true);
let movie_db = {
let rt = tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
.unwrap();
rt.block_on(
SqlitePoolOptions::new()
.idle_timeout(Duration::from_secs(90))
.connect_with(opts),
)
.expect("could not open movies db")
};
let w2w_db = get_db_pool();
let (dur, rows) = {
let rt = tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
.unwrap();
rt.block_on(async {
let dur = add_imdb_movies(&w2w_db, &movie_db, num).await.unwrap();
let rows: i32 = sqlx::query_scalar("select count(*) from watches")
.fetch_one(&w2w_db)
.await
.unwrap();
w2w_db.close().await;
(dur, rows)
})
};
println!(
"Added {rows} movies in {} seconds ({}ms, {}us)",
dur.as_secs_f64(),
dur.as_millis(),
dur.as_micros()
);
}