summaryrefslogtreecommitdiffstats
path: root/src/db
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-11-03 18:19:11 +0100
committerMatthias Beyer <mail@beyermatthias.de>2020-11-03 18:19:11 +0100
commitc3ef30dd543e805b73c005ea93f38b57ef0a7b4d (patch)
treec2c82f1c8d06a5c09d9f057b80b1ff3a589b9140 /src/db
parent61851845eeb918ecae253b9391a33315ee204d1c (diff)
Add subcommand to list env variables from database
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src/db')
-rw-r--r--src/db/cli.rs4
-rw-r--r--src/db/interface.rs45
-rw-r--r--src/db/models/envvar.rs6
-rw-r--r--src/db/models/mod.rs3
4 files changed, 58 insertions, 0 deletions
diff --git a/src/db/cli.rs b/src/db/cli.rs
index 445df3e..abf62cc 100644
--- a/src/db/cli.rs
+++ b/src/db/cli.rs
@@ -35,5 +35,9 @@ pub fn cli<'a>() -> App<'a> {
.about("List artifacts from the DB")
)
+ .subcommand(App::new("envvars")
+ .about("List envvars from the DB")
+ )
+
}
diff --git a/src/db/interface.rs b/src/db/interface.rs
index d745c9e..8df69f9 100644
--- a/src/db/interface.rs
+++ b/src/db/interface.rs
@@ -15,6 +15,7 @@ pub fn interface(db_connection_config: DbConnectionConfig, matches: &ArgMatches,
match matches.subcommand() {
("cli", Some(matches)) => cli(db_connection_config, matches, config),
("artifacts", Some(matches)) => artifacts(db_connection_config),
+ ("envvars", Some(matches)) => envvars(db_connection_config),
(other, _) => return Err(anyhow!("Unknown subcommand: {}", other)),
}
}
@@ -149,6 +150,50 @@ fn artifacts(conn_cfg: DbConnectionConfig) -> Result<()> {
Ok(())
}
+fn envvars(conn_cfg: DbConnectionConfig) -> Result<()> {
+ use diesel::RunQueryDsl;
+ use crate::schema::envvars::dsl;
+ use crate::db::models;
+
+ let hdrs = vec![
+ {
+ let mut column = ascii_table::Column::default();
+ column.header = "Id".into();
+ column.align = ascii_table::Align::Left;
+ column
+ },
+ {
+ let mut column = ascii_table::Column::default();
+ column.header = "Name".into();
+ column.align = ascii_table::Align::Left;
+ column
+ },
+ {
+ let mut column = ascii_table::Column::default();
+ column.header = "Value".into();
+ column.align = ascii_table::Align::Left;
+ column
+ }
+ ];
+
+ let connection = crate::db::establish_connection(conn_cfg)?;
+ let data = dsl::envvars
+ .load::<models::EnvVar>(&connection)?
+ .into_iter()
+ .map(|evar| {
+ vec![format!("{}", evar.id), evar.name, evar.value]
+ })
+ .collect::<Vec<_>>();
+
+ if data.is_empty() {
+ info!("No environment variables in database");
+ } else {
+ display_as_table(hdrs, data);
+ }
+
+ Ok(())
+}
+
fn display_as_table<D: Display>(headers: Vec<ascii_table::Column>, data: Vec<Vec<D>>) {
let mut ascii_table = ascii_table::AsciiTable::default();
diff --git a/src/db/models/envvar.rs b/src/db/models/envvar.rs
new file mode 100644
index 0000000..c70b406
--- /dev/null
+++ b/src/db/models/envvar.rs
@@ -0,0 +1,6 @@
+#[derive(Queryable)]
+pub struct EnvVar {
+ pub id: i32,
+ pub name: String,
+ pub value: String,
+}
diff --git a/src/db/models/mod.rs b/src/db/models/mod.rs
index 7517fac..17b694b 100644
--- a/src/db/models/mod.rs
+++ b/src/db/models/mod.rs
@@ -1,3 +1,6 @@
mod artifact;
pub use artifact::*;
+mod envvar;
+pub use envvar::*;
+