Add timestep option to dump_cell_edit_counts_over_time
This commit is contained in:
parent
7579db364b
commit
a5135b30f4
@ -1,15 +1,35 @@
|
|||||||
use crate::models::cell::{self, CellFileEditCount};
|
use crate::models::cell::{self, CellFileEditCount};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use chrono::{Duration, NaiveDateTime};
|
use chrono::{Duration, NaiveDateTime, Months};
|
||||||
use sqlx::postgres::PgPoolOptions;
|
use sqlx::postgres::PgPoolOptions;
|
||||||
use std::{collections::HashMap, env};
|
use std::{collections::HashMap, env, str::FromStr};
|
||||||
use tokio::fs::File;
|
use tokio::fs::File;
|
||||||
use tokio::io::AsyncWriteExt;
|
use tokio::io::AsyncWriteExt;
|
||||||
use tracing::{debug, info};
|
use tracing::{debug, info};
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum TimeStep {
|
||||||
|
Day,
|
||||||
|
Week,
|
||||||
|
Month,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FromStr for TimeStep {
|
||||||
|
type Err = String;
|
||||||
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
match s {
|
||||||
|
"day" => Ok(TimeStep::Day),
|
||||||
|
"week" => Ok(TimeStep::Week),
|
||||||
|
"month" => Ok(TimeStep::Month),
|
||||||
|
_ => Err(format!("invalid time step: {}", s)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn dump_cell_edit_counts_over_time(
|
pub async fn dump_cell_edit_counts_over_time(
|
||||||
start_date: NaiveDateTime,
|
start_date: NaiveDateTime,
|
||||||
end_date: NaiveDateTime,
|
end_date: NaiveDateTime,
|
||||||
|
time_step: TimeStep,
|
||||||
path: &str,
|
path: &str,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let mut pool = PgPoolOptions::new()
|
let mut pool = PgPoolOptions::new()
|
||||||
@ -28,7 +48,11 @@ pub async fn dump_cell_edit_counts_over_time(
|
|||||||
.connect(&env::var("DATABASE_URL")?)
|
.connect(&env::var("DATABASE_URL")?)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
let next_date = current_date + Duration::weeks(1);
|
let next_date = match &time_step {
|
||||||
|
TimeStep::Day => current_date + Duration::days(1),
|
||||||
|
TimeStep::Week => current_date + Duration::weeks(1),
|
||||||
|
TimeStep::Month => current_date.checked_add_months(Months::new(1)).unwrap(),
|
||||||
|
};
|
||||||
let mut cell_file_edit_counts = HashMap::new();
|
let mut cell_file_edit_counts = HashMap::new();
|
||||||
let counts =
|
let counts =
|
||||||
cell::count_file_edits_in_time_range(&pool, "Skyrim.esm", 1, current_date, next_date)
|
cell::count_file_edits_in_time_range(&pool, "Skyrim.esm", 1, current_date, next_date)
|
||||||
|
@ -14,7 +14,7 @@ pub mod update;
|
|||||||
pub use download_tiles::download_tiles;
|
pub use download_tiles::download_tiles;
|
||||||
pub use dump_cell_data::dump_cell_data;
|
pub use dump_cell_data::dump_cell_data;
|
||||||
pub use dump_cell_edit_counts::dump_cell_edit_counts;
|
pub use dump_cell_edit_counts::dump_cell_edit_counts;
|
||||||
pub use dump_cell_edit_counts_over_time::dump_cell_edit_counts_over_time;
|
pub use dump_cell_edit_counts_over_time::{dump_cell_edit_counts_over_time, TimeStep};
|
||||||
pub use dump_file_data::dump_file_data;
|
pub use dump_file_data::dump_file_data;
|
||||||
pub use dump_games::dump_games;
|
pub use dump_games::dump_games;
|
||||||
pub use dump_mod_cell_counts::dump_mod_cell_counts;
|
pub use dump_mod_cell_counts::dump_mod_cell_counts;
|
||||||
|
22
src/main.rs
22
src/main.rs
@ -1,6 +1,6 @@
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use argh::FromArgs;
|
use argh::FromArgs;
|
||||||
use chrono::{NaiveDateTime, NaiveDate, Utc};
|
use chrono::{NaiveDate, NaiveDateTime, Utc};
|
||||||
use dotenv::dotenv;
|
use dotenv::dotenv;
|
||||||
use sqlx::postgres::PgPoolOptions;
|
use sqlx::postgres::PgPoolOptions;
|
||||||
use std::env;
|
use std::env;
|
||||||
@ -16,7 +16,7 @@ use commands::{
|
|||||||
backfills::backfill_is_base_game, backfills::backfill_is_translation,
|
backfills::backfill_is_base_game, backfills::backfill_is_translation,
|
||||||
backfills::deduplicate_interior_cells, download_tiles, dump_cell_data, dump_cell_edit_counts,
|
backfills::deduplicate_interior_cells, download_tiles, dump_cell_data, dump_cell_edit_counts,
|
||||||
dump_cell_edit_counts_over_time, dump_file_data, dump_games, dump_mod_cell_counts,
|
dump_cell_edit_counts_over_time, dump_file_data, dump_games, dump_mod_cell_counts,
|
||||||
dump_mod_data, dump_mod_search_index, dump_plugin_data, update,
|
dump_mod_data, dump_mod_search_index, dump_plugin_data, update, TimeStep,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(FromArgs)]
|
#[derive(FromArgs)]
|
||||||
@ -42,10 +42,16 @@ struct Args {
|
|||||||
#[argh(option, short = 'e')]
|
#[argh(option, short = 'e')]
|
||||||
dump_edits: Option<String>,
|
dump_edits: Option<String>,
|
||||||
|
|
||||||
/// file to output the cell mod edit counts over time as json
|
/// file to output the cell mod edit counts over time as json (time_step option required with
|
||||||
|
/// this option)
|
||||||
#[argh(option, short = 'E')]
|
#[argh(option, short = 'E')]
|
||||||
dump_edits_over_time: Option<String>,
|
dump_edits_over_time: Option<String>,
|
||||||
|
|
||||||
|
/// the span of time to group cell edit counts into (day, week, or month) when dumping cell
|
||||||
|
/// edits (only relevant for use with dump_edits_over_time option)
|
||||||
|
#[argh(option, short = 'T')]
|
||||||
|
time_step: Option<TimeStep>,
|
||||||
|
|
||||||
/// folder to output all cell data as json files
|
/// folder to output all cell data as json files
|
||||||
#[argh(option, short = 'c')]
|
#[argh(option, short = 'c')]
|
||||||
cell_data: Option<String>,
|
cell_data: Option<String>,
|
||||||
@ -112,12 +118,20 @@ pub async fn main() -> Result<()> {
|
|||||||
return dump_cell_edit_counts(&pool, &path).await;
|
return dump_cell_edit_counts(&pool, &path).await;
|
||||||
}
|
}
|
||||||
if let Some(path) = args.dump_edits_over_time {
|
if let Some(path) = args.dump_edits_over_time {
|
||||||
|
if let Some(time_step) = args.time_step {
|
||||||
return dump_cell_edit_counts_over_time(
|
return dump_cell_edit_counts_over_time(
|
||||||
NaiveDate::from_ymd_opt(2011, 11, 11).unwrap().and_hms_opt(0, 0, 0).unwrap(),
|
NaiveDate::from_ymd_opt(2011, 11, 11)
|
||||||
|
.unwrap()
|
||||||
|
.and_hms_opt(0, 0, 0)
|
||||||
|
.unwrap(),
|
||||||
Utc::now().naive_utc(),
|
Utc::now().naive_utc(),
|
||||||
|
time_step,
|
||||||
&path,
|
&path,
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
} else {
|
||||||
|
panic!("time_step option required with dump_edits_over_time option");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if let Some(dir) = args.cell_data {
|
if let Some(dir) = args.cell_data {
|
||||||
return dump_cell_data(&dir).await;
|
return dump_cell_data(&dir).await;
|
||||||
|
Loading…
Reference in New Issue
Block a user