summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2021-03-04 11:44:50 +0100
committerMatthias Beyer <matthias.beyer@atos.net>2021-03-04 11:44:56 +0100
commit2ef64316d1af14e36d7946ccdf64a2dd97202fc0 (patch)
tree932a1cad5185b002294eb46b87d0b4f07a485a6b
parent746d46d57d39b2f32d8f02454463b03f64c16cdd (diff)
Fix: Implementing jobs filtering only by env
Before this patch, one was only able to filter jobs by env if they were also filtered by submit. This patch fixes this by implementing env filtering for not-submit-filtered jobs. Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
-rw-r--r--src/commands/db.rs56
-rw-r--r--src/util/mod.rs1
2 files changed, 33 insertions, 24 deletions
diff --git a/src/commands/db.rs b/src/commands/db.rs
index 0ef9893..349fa79 100644
--- a/src/commands/db.rs
+++ b/src/commands/db.rs
@@ -306,6 +306,11 @@ fn jobs(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> {
"Env",
]);
let conn = crate::db::establish_connection(conn_cfg)?;
+ let env_filter_tpl = matches
+ .value_of("filter_env")
+ .map(crate::util::env::parse_to_env)
+ .transpose()?;
+
let jobs = matches
.value_of("submit_uuid")
.map(uuid::Uuid::parse_str)
@@ -316,46 +321,49 @@ fn jobs(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> {
.inner_join(schema::endpoints::table)
.inner_join(schema::packages::table)
.left_outer_join(schema::job_envs::table.inner_join(schema::envvars::table))
- .filter(schema::submits::uuid.eq(&submit_uuid));
+ .filter(schema::submits::uuid.eq(&submit_uuid))
+ .into_boxed();
- if let Some((env_name, env_value)) = matches
- .value_of("filter_env")
- .map(crate::util::env::parse_to_env)
- .transpose()?
- {
- sel.filter({
- use crate::diesel::BoolExpressionMethods;
+ let sel = if let Some((name, val)) = env_filter_tpl.as_ref() {
+ use crate::diesel::BoolExpressionMethods;
- schema::envvars::dsl::name
- .eq(env_name.as_ref())
- .and(schema::envvars::dsl::value.eq(env_value))
+ sel.filter({
+ schema::envvars::dsl::name.eq(name.as_ref())
+ .and(schema::envvars::dsl::value.eq(val))
})
- .load::<(
- models::Job,
- models::Submit,
- models::Endpoint,
- models::Package,
- Option<(models::JobEnv, models::EnvVar)>,
- )>(&conn)
- .map_err(Error::from)
} else {
- sel.load::<(
+ sel
+ };
+
+ sel.load::<(
models::Job,
models::Submit,
models::Endpoint,
models::Package,
Option<(models::JobEnv, models::EnvVar)>,
)>(&conn)
- .map_err(Error::from)
- }
+ .map_err(Error::from)
})
.unwrap_or_else(|| {
- dsl::jobs
+ let sel = dsl::jobs
.inner_join(crate::schema::submits::table)
.inner_join(crate::schema::endpoints::table)
.inner_join(crate::schema::packages::table)
.left_outer_join(schema::job_envs::table.inner_join(schema::envvars::table))
- .load::<(
+ .into_boxed();
+
+ let sel = if let Some((name, val)) = env_filter_tpl.as_ref() {
+ use crate::diesel::BoolExpressionMethods;
+
+ sel.filter({
+ schema::envvars::dsl::name.eq(name.as_ref())
+ .and(schema::envvars::dsl::value.eq(val))
+ })
+ } else {
+ sel
+ };
+
+ sel.load::<(
models::Job,
models::Submit,
models::Endpoint,
diff --git a/src/util/mod.rs b/src/util/mod.rs
index 8b78b2a..c8216b7 100644
--- a/src/util/mod.rs
+++ b/src/util/mod.rs
@@ -39,6 +39,7 @@ impl AsRef<str> for EnvironmentVariableName {
}
}
+
pub mod docker;
pub mod env;
pub mod filters;