Skip to content

Commit

Permalink
Improve seed structure
Browse files Browse the repository at this point in the history
  • Loading branch information
Heliozoa committed Jul 11, 2023
1 parent eb391a4 commit c362f2b
Show file tree
Hide file tree
Showing 9 changed files with 477 additions and 550 deletions.
1 change: 1 addition & 0 deletions services/headless-lms/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions services/headless-lms/entrypoint/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,5 @@ headless-lms-server = { path = "../server" }
actix-web = "4.3.1"
# Flexible concrete Error type built on std::error::Error
anyhow = "1.0.71"
# A runtime for writing reliable network applications without compromising speed.
tokio = "1.29.1"
47 changes: 34 additions & 13 deletions services/headless-lms/entrypoint/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,29 +1,50 @@
use std::future::Future;

use headless_lms_server::programs;

/// The entrypoint to all the binaries provided by the project.
/// Expects program name as the first argument.
#[actix_web::main]
async fn main() -> anyhow::Result<()> {
fn main() -> anyhow::Result<()> {
let program_name = std::env::args()
.nth(1)
.expect("No program name provided as the first argument.");
match program_name.as_str() {
"doc-file-generator" => programs::doc_file_generator::main().await?,
"email-deliver" => programs::email_deliver::main().await?,
"ended-exams-processor" => programs::ended_exams_processor::main().await?,
"doc-file-generator" => tokio_run(programs::doc_file_generator::main())?,
"email-deliver" => tokio_run(programs::email_deliver::main())?,
"ended-exams-processor" => tokio_run(programs::ended_exams_processor::main())?,
"open-university-registration-link-fetcher" => {
programs::open_university_registration_link_fetcher::main().await?
tokio_run(programs::open_university_registration_link_fetcher::main())?
}
"regrader" => programs::regrader::main().await?,
"seed" => programs::seed::main().await?,
"service-info-fetcher" => programs::service_info_fetcher::main().await?,
"peer-review-updater" => programs::peer_review_updater::main().await?,
"start-server" => programs::start_server::main().await?,
"regrader" => tokio_run(programs::regrader::main())?,
"seed" => tokio_run(programs::seed::main())?,
"service-info-fetcher" => tokio_run(programs::service_info_fetcher::main())?,
"peer-review-updater" => tokio_run(programs::peer_review_updater::main())?,
"start-server" => actix_run(programs::start_server::main())?,
"sorter" => programs::sorter::sort()?,
"sync-tmc-users" => programs::sync_tmc_users::main().await?,
"calculate-page-visit-stats" => programs::calculate_page_visit_stats::main().await?,
"sync-tmc-users" => tokio_run(programs::sync_tmc_users::main())?,
"calculate-page-visit-stats" => tokio_run(programs::calculate_page_visit_stats::main())?,
_ => panic!("Unknown program name: {}", program_name),
};

Ok(())
}

fn actix_run<F>(f: F) -> anyhow::Result<()>
where
F: Future<Output = anyhow::Result<()>>,
{
let rt = actix_web::rt::Runtime::new()?;
rt.block_on(f)?;
Ok(())
}

// tokio's default runtime can use multiple threads, so it's less prone to stack overflows when spawning lots of tasks
// making it better suited for non-actix-web tasks
fn tokio_run<F>(f: F) -> anyhow::Result<()>
where
F: Future<Output = anyhow::Result<()>>,
{
let rt = tokio::runtime::Runtime::new()?;
rt.block_on(f)?;
Ok(())
}
20 changes: 10 additions & 10 deletions services/headless-lms/server/src/programs/seed/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![allow(clippy::too_many_arguments)]

pub mod seed_certificate_fonts;
pub mod seed_courses;
pub mod seed_exercise_services;
Expand Down Expand Up @@ -28,26 +26,28 @@ pub async fn main() -> anyhow::Result<()> {
let (_, seed_users_result, _) = try_join!(
run_parallelly(seed_exercise_services::seed_exercise_services(
db_pool.clone()
),),
)),
run_parallelly(seed_users::seed_users(db_pool.clone())),
run_parallelly(seed_playground_examples::seed_playground_examples(
db_pool.clone()
),),
)),
)?;

let (uh_cs_organization_result, _uh_mathstat_organization_id) = try_join!(
run_parallelly(seed_organizations::uh_cs::seed_organization_uh_cs(
db_pool.clone(),
seed_users_result.clone(),
Arc::clone(&jwt_key),
Box::pin(run_parallelly(
seed_organizations::uh_cs::seed_organization_uh_cs(
db_pool.clone(),
seed_users_result.clone(),
Arc::clone(&jwt_key),
)
)),
run_parallelly(
Box::pin(run_parallelly(
seed_organizations::uh_mathstat::seed_organization_uh_mathstat(
db_pool.clone(),
seed_users_result.clone(),
Arc::clone(&jwt_key),
)
)
))
)?;

seed_roles::seed_roles(&db_pool, &seed_users_result, &uh_cs_organization_result).await?;
Expand Down
Loading

0 comments on commit c362f2b

Please sign in to comment.