use crate::service::config::{get_topology_config, TopologyConfig};
use structopt::StructOpt;
#[derive(Debug, Clone, StructOpt)]
#[structopt(name = "Tempest Package", about = "Topology cli options")]
pub(crate) struct PackageOpt {
#[structopt(short = "h", long = "host", default_value = "0.0.0.0")]
pub host: String,
#[structopt(short = "p", long = "port", default_value = "8765")]
pub port: String,
#[structopt(long = "agent_host", default_value = "0.0.0.0")]
pub agent_host: String,
#[structopt(long = "agent_port", default_value = "7654")]
pub agent_port: String,
#[structopt(short = "g", long = "graceful_shutdown", default_value = "30000")]
pub graceful_shutdown: u64,
#[structopt(subcommand)]
pub cmd: PackageCmd,
}
impl PackageOpt {
pub fn host_port(&self) -> String {
format!("{}:{}", self.host, self.port)
}
pub fn get_config(&self) -> Result<Option<TopologyConfig>, config::ConfigError> {
let cfg = match &self.cmd {
PackageCmd::Task(ref opt) => &opt.config,
PackageCmd::Topology(ref opt) => &opt.config,
PackageCmd::Standalone(ref opt) => &opt.config,
};
match &cfg {
Some(ConfigOpt::Config { path }) => {
if let Some(path) = path {
match get_topology_config(path) {
Ok(cfg) => return Ok(Some(cfg)),
Err(err) => return Err(err),
}
}
}
_ => {}
}
Ok(None)
}
}
#[derive(Debug, Clone, StructOpt)]
pub(crate) enum PackageCmd {
#[structopt(name = "standalone")]
Standalone(StandaloneOpt),
#[structopt(name = "topology")]
Topology(TopologyOpt),
#[structopt(name = "task")]
Task(TaskOpt),
}
#[derive(Debug, Clone, StructOpt)]
pub(crate) struct StandaloneOpt {
#[structopt(subcommand)]
pub config: Option<ConfigOpt>,
}
#[derive(Debug, Clone, StructOpt)]
pub(crate) struct TopologyOpt {
#[structopt(subcommand)]
pub config: Option<ConfigOpt>,
}
#[derive(Default, Debug, Clone, StructOpt)]
pub(crate) struct TaskOpt {
#[structopt(short = "n", long = "name")]
pub name: String,
#[structopt(short = "i", long = "poll_interval")]
pub poll_interval: Option<u64>,
#[structopt(short = "c", long = "poll_count")]
pub poll_count: Option<u16>,
#[structopt(short = "b", long = "max_backoff")]
pub max_backoff: Option<u64>,
#[structopt(subcommand)]
pub config: Option<ConfigOpt>,
}
#[derive(Debug, Clone, StructOpt)]
pub(crate) enum ConfigOpt {
#[structopt(name = "config")]
Config {
#[structopt(short = "p", long = "path")]
path: Option<String>,
},
}
#[derive(Default, Debug, Clone, StructOpt)]
pub(crate) struct AgentOpt {
#[structopt(short = "h", long = "host", default_value = "0.0.0.0")]
pub host: String,
#[structopt(short = "p", long = "port", default_value = "7654")]
pub port: String,
}
impl AgentOpt {
pub fn new(host: String, port: String) -> Self {
AgentOpt { host, port }
}
pub fn host_port(&self) -> String {
format!("{}:{}", self.host, self.port)
}
}