summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2021-07-27 16:36:35 +0200
committerMatthias Beyer <matthias.beyer@atos.net>2021-07-27 16:36:35 +0200
commit1b575fc3582d8105aebf372a0470cd8c57d94ec2 (patch)
treeb14a3151131ac86f83cd79b61ea1af55e67c5ccd
parent61a6427fe0fdaf894f713cac9cf23418e9708846 (diff)
parentab04d88ae84c33f3577870c10378f0166adf27bc (diff)
Merge branch 'connecting-spinner'
-rw-r--r--src/commands/db.rs64
-rw-r--r--src/commands/release.rs14
-rw-r--r--src/db/connection.rs15
-rw-r--r--src/main.rs10
4 files changed, 60 insertions, 43 deletions
diff --git a/src/commands/db.rs b/src/commands/db.rs
index e984848..672a0d6 100644
--- a/src/commands/db.rs
+++ b/src/commands/db.rs
@@ -33,11 +33,12 @@ use log::trace;
use crate::commands::util::get_date_filter;
use crate::config::Configuration;
-use crate::db::models;
use crate::db::DbConnectionConfig;
+use crate::db::models;
use crate::log::JobResult;
use crate::package::Script;
use crate::schema;
+use crate::util::progress::ProgressBars;
diesel_migrations::embed_migrations!("migrations");
@@ -46,19 +47,20 @@ pub fn db(
db_connection_config: DbConnectionConfig<'_>,
config: &Configuration,
matches: &ArgMatches,
+ progressbars: ProgressBars,
) -> Result<()> {
match matches.subcommand() {
Some(("cli", matches)) => cli(db_connection_config, matches),
- Some(("setup", _matches)) => setup(db_connection_config),
- Some(("artifacts", matches)) => artifacts(db_connection_config, matches),
- Some(("envvars", matches)) => envvars(db_connection_config, matches),
- Some(("images", matches)) => images(db_connection_config, matches),
- Some(("submit", matches)) => submit(db_connection_config, matches),
- Some(("submits", matches)) => submits(db_connection_config, matches),
- Some(("jobs", matches)) => jobs(db_connection_config, matches),
- Some(("job", matches)) => job(db_connection_config, config, matches),
- Some(("log-of", matches)) => log_of(db_connection_config, matches),
- Some(("releases", matches)) => releases(db_connection_config, config, matches),
+ Some(("setup", _matches)) => setup(db_connection_config, progressbars),
+ Some(("artifacts", matches)) => artifacts(db_connection_config, matches, progressbars),
+ Some(("envvars", matches)) => envvars(db_connection_config, matches, progressbars),
+ Some(("images", matches)) => images(db_connection_config, matches, progressbars),
+ Some(("submit", matches)) => submit(db_connection_config, matches, progressbars),
+ Some(("submits", matches)) => submits(db_connection_config, matches, progressbars),
+ Some(("jobs", matches)) => jobs(db_connection_config, matches, progressbars),
+ Some(("job", matches)) => job(db_connection_config, config, matches, progressbars),
+ Some(("log-of", matches)) => log_of(db_connection_config, matches, progressbars),
+ Some(("releases", matches)) => releases(db_connection_config, config, matches, progressbars),
Some((other, _)) => Err(anyhow!("Unknown subcommand: {}", other)),
None => Err(anyhow!("No subcommand")),
}
@@ -148,18 +150,18 @@ fn cli(db_connection_config: DbConnectionConfig<'_>, matches: &ArgMatches) -> Re
.run_for_uri(db_connection_config)
}
-fn setup(conn_cfg: DbConnectionConfig<'_>) -> Result<()> {
- let conn = conn_cfg.establish_connection()?;
+fn setup(conn_cfg: DbConnectionConfig<'_>, progressbars: ProgressBars) -> Result<()> {
+ let conn = conn_cfg.establish_connection(&progressbars)?;
embedded_migrations::run_with_output(&conn, &mut std::io::stdout()).map_err(Error::from)
}
/// Implementation of the "db artifacts" subcommand
-fn artifacts(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()> {
+fn artifacts(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches, progressbars: ProgressBars) -> Result<()> {
use crate::schema::artifacts::dsl;
let csv = matches.is_present("csv");
let hdrs = crate::commands::util::mk_header(vec!["Path", "Released", "Job"]);
- let conn = conn_cfg.establish_connection()?;
+ let conn = conn_cfg.establish_connection(&progressbars)?;
let data = matches
.value_of("job_uuid")
.map(uuid::Uuid::parse_str)
@@ -203,12 +205,12 @@ fn artifacts(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<(
}
/// Implementation of the "db envvars" subcommand
-fn envvars(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()> {
+fn envvars(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches, progressbars: ProgressBars) -> Result<()> {
use crate::schema::envvars::dsl;
let csv = matches.is_present("csv");
let hdrs = crate::commands::util::mk_header(vec!["Name", "Value"]);
- let conn = conn_cfg.establish_connection()?;
+ let conn = conn_cfg.establish_connection(&progressbars)?;
let data = dsl::envvars
.load::<models::EnvVar>(&conn)?
.into_iter()
@@ -225,12 +227,12 @@ fn envvars(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()>
}
/// Implementation of the "db images" subcommand
-fn images(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()> {
+fn images(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches, progressbars: ProgressBars) -> Result<()> {
use crate::schema::images::dsl;
let csv = matches.is_present("csv");
let hdrs = crate::commands::util::mk_header(vec!["Name"]);
- let conn = conn_cfg.establish_connection()?;
+ let conn = conn_cfg.establish_connection(&progressbars)?;
let data = dsl::images
.load::<models::Image>(&conn)?
.into_iter()
@@ -247,8 +249,8 @@ fn images(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()>
}
/// Implementation of the "db submit" subcommand
-fn submit(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()> {
- let conn = conn_cfg.establish_connection()?;
+fn submit(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches, progressbars: ProgressBars) -> Result<()> {
+ let conn = conn_cfg.establish_connection(&progressbars)?;
let submit_id = matches.value_of("submit")
.map(uuid::Uuid::from_str)
.transpose()
@@ -331,11 +333,11 @@ fn submit(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()>
}
/// Implementation of the "db submits" subcommand
-fn submits(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()> {
+fn submits(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches, progressbars: ProgressBars) -> Result<()> {
let csv = matches.is_present("csv");
let limit = matches.value_of("limit").map(i64::from_str).transpose()?;
let hdrs = crate::commands::util::mk_header(vec!["Time", "UUID"]);
- let conn = conn_cfg.establish_connection()?;
+ let conn = conn_cfg.establish_connection(&progressbars)?;
let query = schema::submits::table
.order_by(schema::submits::id.desc()); // required for the --limit implementation
@@ -397,7 +399,7 @@ fn submits(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()>
}
/// Implementation of the "db jobs" subcommand
-fn jobs(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()> {
+fn jobs(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches, progressbars: ProgressBars) -> Result<()> {
let csv = matches.is_present("csv");
let hdrs = crate::commands::util::mk_header(vec![
"Submit",
@@ -408,7 +410,7 @@ fn jobs(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()> {
"Package",
"Version",
]);
- let conn = conn_cfg.establish_connection()?;
+ let conn = conn_cfg.establish_connection(&progressbars)?;
let older_than_filter = get_date_filter("older_than", matches)?;
let newer_than_filter = get_date_filter("newer_than", matches)?;
@@ -495,14 +497,14 @@ fn jobs(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()> {
}
/// Implementation of the "db job" subcommand
-fn job(conn_cfg: DbConnectionConfig<'_>, config: &Configuration, matches: &ArgMatches) -> Result<()> {
+fn job(conn_cfg: DbConnectionConfig<'_>, config: &Configuration, matches: &ArgMatches, progressbars: ProgressBars) -> Result<()> {
let script_highlight = !matches.is_present("no_script_highlight");
let script_line_numbers = !matches.is_present("no_script_line_numbers");
let configured_theme = config.script_highlight_theme();
let show_log = matches.is_present("show_log");
let show_script = matches.is_present("show_script");
let csv = matches.is_present("csv");
- let conn = conn_cfg.establish_connection()?;
+ let conn = conn_cfg.establish_connection(&progressbars)?;
let job_uuid = matches
.value_of("job_uuid")
.map(uuid::Uuid::parse_str)
@@ -669,8 +671,8 @@ fn job(conn_cfg: DbConnectionConfig<'_>, config: &Configuration, matches: &ArgMa
}
/// Implementation of the subcommand "db log-of"
-fn log_of(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()> {
- let conn = conn_cfg.establish_connection()?;
+fn log_of(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches, progressbars: ProgressBars) -> Result<()> {
+ let conn = conn_cfg.establish_connection(&progressbars)?;
let job_uuid = matches
.value_of("job_uuid")
.map(uuid::Uuid::parse_str)
@@ -692,9 +694,9 @@ fn log_of(conn_cfg: DbConnectionConfig<'_>, matches: &ArgMatches) -> Result<()>
}
/// Implementation of the "db releases" subcommand
-fn releases(conn_cfg: DbConnectionConfig<'_>, config: &Configuration, matches: &ArgMatches) -> Result<()> {
+fn releases(conn_cfg: DbConnectionConfig<'_>, config: &Configuration, matches: &ArgMatches, progressbars: ProgressBars) -> Result<()> {
let csv = matches.is_present("csv");
- let conn = conn_cfg.establish_connection()?;
+ let conn = conn_cfg.establish_connection(&progressbars)?;
let header = crate::commands::util::mk_header(["Package", "Version", "Date", "Path"].to_vec());
let mut query = schema::jobs::table
.inner_join(schema::packages::table)
diff --git a/src/commands/release.rs b/src/commands/release.rs
index 6f0232b..12decff 100644
--- a/src/commands/release.rs
+++ b/src/commands/release.rs
@@ -22,18 +22,20 @@ use log::{debug, info, trace};
use tokio_stream::StreamExt;
use crate::config::Configuration;
-use crate::db::models as dbmodels;
use crate::db::DbConnectionConfig;
+use crate::db::models as dbmodels;
+use crate::util::progress::ProgressBars;
/// Implementation of the "release" subcommand
pub async fn release(
db_connection_config: DbConnectionConfig<'_>,
config: &Configuration,
matches: &ArgMatches,
+ progressbars: ProgressBars,
) -> Result<()> {
match matches.subcommand() {
- Some(("new", matches)) => new_release(db_connection_config, config, matches).await,
- Some(("rm", matches)) => rm_release(db_connection_config, config, matches).await,
+ Some(("new", matches)) => new_release(db_connection_config, config, matches, progressbars).await,
+ Some(("rm", matches)) => rm_release(db_connection_config, config, matches, progressbars).await,
Some((other, _matches)) => Err(anyhow!("Unknown subcommand: {}", other)),
None => Err(anyhow!("Missing subcommand")),
}
@@ -44,6 +46,7 @@ async fn new_release(
db_connection_config: DbConnectionConfig<'_>,
config: &Configuration,
matches: &ArgMatches,
+ progressbars: ProgressBars,
) -> Result<()> {
let print_released_file_pathes = !matches.is_present("quiet");
let release_store_name = matches.value_of("release_store_name").unwrap(); // safe by clap
@@ -60,7 +63,7 @@ async fn new_release(
debug!("Release called for: {:?} {:?}", pname, pvers);
- let conn = db_connection_config.establish_connection()?;
+ let conn = db_connection_config.establish_connection(&progressbars)?;
let submit_uuid = matches
.value_of("submit_uuid")
.map(uuid::Uuid::parse_str)
@@ -193,6 +196,7 @@ pub async fn rm_release(
db_connection_config: DbConnectionConfig<'_>,
config: &Configuration,
matches: &ArgMatches,
+ progressbars: ProgressBars,
) -> Result<()> {
let release_store_name = matches.value_of("release_store_name").map(String::from).unwrap(); // safe by clap
if !(config.releases_directory().exists() && config.releases_directory().is_dir()) {
@@ -209,7 +213,7 @@ pub async fn rm_release(
let pvers = matches.value_of("package_version").map(String::from).unwrap(); // safe by clap
debug!("Remove Release called for: {:?} {:?}", pname, pvers);
- let conn = db_connection_config.establish_connection()?;
+ let conn = db_connection_config.establish_connection(&progressbars)?;
let (release, artifact) = crate::schema::jobs::table
.inner_join(crate::schema::packages::table)
diff --git a/src/db/connection.rs b/src/db/connection.rs
index cf9a0c0..76d38c1 100644
--- a/src/db/connection.rs
+++ b/src/db/connection.rs
@@ -19,6 +19,7 @@ use getset::Getters;
use log::debug;
use crate::config::Configuration;
+use crate::util::progress::ProgressBars;
#[derive(Getters)]
pub struct DbConnectionConfig<'a> {
@@ -78,7 +79,7 @@ impl<'a> DbConnectionConfig<'a> {
})
}
- pub fn establish_connection(self) -> Result<PgConnection> {
+ pub fn establish_connection(self, progressbars: &ProgressBars) -> Result<PgConnection> {
debug!("Trying to connect to database: {:?}", self);
let database_uri: String = format!(
"postgres://{user}:{password}@{host}:{port}/{name}?connect_timeout={timeout}",
@@ -89,7 +90,17 @@ impl<'a> DbConnectionConfig<'a> {
name = self.database_name,
timeout = self.database_connection_timeout,
);
- PgConnection::establish(&database_uri).map_err(Error::from)
+
+ let bar = progressbars.spinner();
+ bar.set_message("Establishing database connection");
+
+ let conn = PgConnection::establish(&database_uri).map_err(Error::from);
+ if conn.is_err() {
+ bar.finish_with_message("Connection could not be established");
+ } else {
+ bar.finish_with_message("Connection established");
+ }
+ conn
}
}
diff --git a/src/main.rs b/src/main.rs
index f32b3a5..4c5ce5d 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -152,9 +152,9 @@ async fn main() -> Result<()> {
let db_connection_config = crate::db::DbConnectionConfig::parse(&config, &cli)?;
match cli.subcommand() {
Some(("generate-completions", matches)) => generate_completions(matches),
- Some(("db", matches)) => crate::commands::db(db_connection_config, &config, matches)?,
+ Some(("db", matches)) => crate::commands::db(db_connection_config, &config, matches, progressbars)?,
Some(("build", matches)) => {
- let conn = db_connection_config.establish_connection()?;
+ let conn = db_connection_config.establish_connection(&progressbars)?;
let repo = load_repo()?;
@@ -200,7 +200,7 @@ async fn main() -> Result<()> {
Some(("find-artifact", matches)) => {
let repo = load_repo()?;
- let conn = db_connection_config.establish_connection()?;
+ let conn = db_connection_config.establish_connection(&progressbars)?;
crate::commands::find_artifact(matches, &config, progressbars, repo, conn)
.await
.context("find-artifact command failed")?
@@ -221,7 +221,7 @@ async fn main() -> Result<()> {
}
Some(("release", matches)) => {
- crate::commands::release(db_connection_config, &config, matches)
+ crate::commands::release(db_connection_config, &config, matches, progressbars)
.await
.context("release command failed")?
}
@@ -242,7 +242,7 @@ async fn main() -> Result<()> {
Some(("metrics", _)) => {
let repo = load_repo()?;
- let conn = db_connection_config.establish_connection()?;
+ let conn = db_connection_config.establish_connection(&progressbars)?;
crate::commands::metrics(&repo_path, &config, repo, conn)
.await
.context("metrics command failed")?