summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/cli.rs10
-rw-r--r--src/commands/db.rs28
2 files changed, 31 insertions, 7 deletions
diff --git a/src/cli.rs b/src/cli.rs
index c58ba1a..7f82994 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -176,6 +176,16 @@ pub fn cli<'a>() -> App<'a> {
.value_name("UUID")
.about("Only list jobs of a certain submit")
)
+
+ .arg(Arg::new("env_filter")
+ .required(false)
+ .multiple(false)
+ .long("env")
+ .short('E')
+ .takes_value(true)
+ .value_name("KV")
+ .about("Filter for this \"key=value\" environment variable")
+ )
)
.subcommand(App::new("job")
diff --git a/src/commands/db.rs b/src/commands/db.rs
index 38e1de5..7242ee9 100644
--- a/src/commands/db.rs
+++ b/src/commands/db.rs
@@ -251,26 +251,40 @@ fn jobs(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> {
.map(uuid::Uuid::parse_str)
.transpose()?
.map(|submit_uuid| {
- let submit = models::Submit::with_id(&conn, &submit_uuid)?;
-
- models::Job::belonging_to(&submit)
+ let sel = schema::jobs::table
.inner_join(schema::submits::table)
.inner_join(schema::endpoints::table)
.inner_join(schema::packages::table)
- .load::<(models::Job, models::Submit, models::Endpoint, models::Package)>(&conn)
- .map_err(Error::from)
+ .left_outer_join(schema::job_envs::table.inner_join(schema::envvars::table))
+ .filter(schema::submits::uuid.eq(&submit_uuid));
+
+ 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;
+
+ schema::envvars::dsl::name
+ .eq(env_name.as_ref())
+ .and(schema::envvars::dsl::value.eq(env_value))
+ })
+ .load::<(models::Job, models::Submit, models::Endpoint, models::Package, Option<(models::JobEnv, models::EnvVar)>)>(&conn)
+ .map_err(Error::from)
+ } else {
+ sel.load::<(models::Job, models::Submit, models::Endpoint, models::Package, Option<(models::JobEnv, models::EnvVar)>)>(&conn)
+ .map_err(Error::from)
+ }
})
.unwrap_or_else(|| {
dsl::jobs
.inner_join(crate::schema::submits::table)
.inner_join(crate::schema::endpoints::table)
.inner_join(crate::schema::packages::table)
- .load::<(models::Job, models::Submit, models::Endpoint, models::Package)>(&conn)
+ .left_outer_join(schema::job_envs::table.inner_join(schema::envvars::table))
+ .load::<(models::Job, models::Submit, models::Endpoint, models::Package, Option<(models::JobEnv, models::EnvVar)>)>(&conn)
.map_err(Error::from)
})?;
let data = jobs.into_iter()
- .map(|(job, submit, ep, package)| {
+ .map(|(job, submit, ep, package, _)| {
let success = crate::log::ParsedLog::build_from(&job.log_text)?
.is_successfull()
.map(|b| if b {