Skip to content

Commit

Permalink
Add analytics datasets and dataverses subcommands
Browse files Browse the repository at this point in the history
  • Loading branch information
daschl committed May 20, 2020
1 parent 3069e72 commit 50f6c07
Show file tree
Hide file tree
Showing 4 changed files with 134 additions and 0 deletions.
64 changes: 64 additions & 0 deletions src/cli/analytics_datasets.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
use super::util::convert_json_value_to_nu_value;
use crate::state::State;
use couchbase::AnalyticsOptions;
use futures::executor::block_on;
use futures::stream::StreamExt;
use log::debug;
use nu_cli::{CommandArgs, CommandRegistry, OutputStream};
use nu_errors::ShellError;
use nu_protocol::Signature;
use nu_source::Tag;
use std::sync::Arc;

pub struct AnalyticsDatasets {
state: Arc<State>,
}

impl AnalyticsDatasets {
pub fn new(state: Arc<State>) -> Self {
Self { state }
}
}

impl nu_cli::WholeStreamCommand for AnalyticsDatasets {
fn name(&self) -> &str {
"analytics datasets"
}

fn signature(&self) -> Signature {
Signature::build("analytics datasets")
}

fn usage(&self) -> &str {
"Lists all analytics datasets"
}

fn run(
&self,
_args: CommandArgs,
_registry: &CommandRegistry,
) -> Result<OutputStream, ShellError> {
block_on(datasets(self.state.clone()))
}
}

async fn datasets(state: Arc<State>) -> Result<OutputStream, ShellError> {
let statement = "SELECT d.* FROM Metadata.`Dataset` d WHERE d.DataverseName <> \"Metadata\"";

debug!("Running analytics query {}", &statement);
let result = state
.active_cluster()
.cluster()
.analytics_query(statement, AnalyticsOptions::default())
.await;

match result {
Ok(mut r) => {
let stream = r
.rows::<serde_json::Value>()
.map(|v| convert_json_value_to_nu_value(&v.unwrap(), Tag::default()));
Ok(OutputStream::from_input(stream))
}
Err(e) => Err(ShellError::untagged_runtime_error(format!("{}", e))),
}
}
64 changes: 64 additions & 0 deletions src/cli/analytics_dataverses.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
use super::util::convert_json_value_to_nu_value;
use crate::state::State;
use couchbase::AnalyticsOptions;
use futures::executor::block_on;
use futures::stream::StreamExt;
use log::debug;
use nu_cli::{CommandArgs, CommandRegistry, OutputStream};
use nu_errors::ShellError;
use nu_protocol::Signature;
use nu_source::Tag;
use std::sync::Arc;

pub struct AnalyticsDataverses {
state: Arc<State>,
}

impl AnalyticsDataverses {
pub fn new(state: Arc<State>) -> Self {
Self { state }
}
}

impl nu_cli::WholeStreamCommand for AnalyticsDataverses {
fn name(&self) -> &str {
"analytics dataverses"
}

fn signature(&self) -> Signature {
Signature::build("analytics dataverses")
}

fn usage(&self) -> &str {
"Lists all analytics dataverses"
}

fn run(
&self,
_args: CommandArgs,
_registry: &CommandRegistry,
) -> Result<OutputStream, ShellError> {
block_on(dataverses(self.state.clone()))
}
}

async fn dataverses(state: Arc<State>) -> Result<OutputStream, ShellError> {
let statement = "SELECT d.* FROM Metadata.`Dataverse` d WHERE d.DataverseName <> \"Metadata\"";

debug!("Running analytics query {}", &statement);
let result = state
.active_cluster()
.cluster()
.analytics_query(statement, AnalyticsOptions::default())
.await;

match result {
Ok(mut r) => {
let stream = r
.rows::<serde_json::Value>()
.map(|v| convert_json_value_to_nu_value(&v.unwrap(), Tag::default()));
Ok(OutputStream::from_input(stream))
}
Err(e) => Err(ShellError::untagged_runtime_error(format!("{}", e))),
}
}
4 changes: 4 additions & 0 deletions src/cli/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
mod analytics;
mod analytics_indexes;
mod analytics_datasets;
mod analytics_dataverses;
mod buckets;
mod buckets_config;
mod clusters;
Expand All @@ -20,6 +22,8 @@ mod util;

pub use analytics::Analytics;
pub use analytics_indexes::AnalyticsIndexes;
pub use analytics_datasets::AnalyticsDatasets;
pub use analytics_dataverses::AnalyticsDataverses;
pub use buckets::Buckets;
pub use buckets_config::BucketsConfig;
pub use clusters::Clusters;
Expand Down
2 changes: 2 additions & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ async fn main() -> Result<(), Box<dyn Error>> {
// Displays indexes
nu_cli::whole_stream_command(QueryIndexes::new(state.clone())),
nu_cli::whole_stream_command(AnalyticsIndexes::new(state.clone())),
nu_cli::whole_stream_command(AnalyticsDatasets::new(state.clone())),
nu_cli::whole_stream_command(AnalyticsDataverses::new(state.clone())),
// Allows to switch clusters, buckets and collections on the fly
nu_cli::whole_stream_command(UseCmd::new(state.clone())),
nu_cli::whole_stream_command(UseCluster::new(state.clone())),
Expand Down

0 comments on commit 50f6c07

Please sign in to comment.