1mod cmd;
3
4use clap::Parser;
5use glob::Pattern;
6
7pub use cmd::{cmd, top};
8use url::Url;
9use vector_lib::top::state::{FilterColumn, SortColumn};
10
11use crate::config::api::default_graphql_url;
12
13#[derive(Parser, Debug, Clone)]
15#[command(rename_all = "kebab-case")]
16pub struct Opts {
17 #[arg(default_value = "1000", short = 'i', long)]
19 interval: u32,
20
21 #[arg(short, long)]
23 url: Option<Url>,
24
25 #[arg(short = 'H', long, default_value_t = true)]
27 human_metrics: bool,
28
29 #[arg(short, long)]
33 no_reconnect: bool,
34
35 #[arg(default_value = "*", value_delimiter(','), short = 'c', long)]
37 components: Vec<Pattern>,
38
39 #[arg(short = 's', long)]
41 sort_field: Option<SortColumn>,
42
43 #[arg(long, default_value_t = false)]
45 sort_desc: bool,
46
47 #[arg(default_value = "id", long)]
49 filter_field: FilterColumn,
50
51 #[arg(short = 'f', long)]
55 filter_value: Option<String>,
56}
57
58impl Opts {
59 pub fn url(&self) -> Url {
62 self.url.clone().unwrap_or_else(default_graphql_url)
63 }
64
65 pub fn web_socket_url(&self) -> Url {
67 let mut url = self.url();
68 url.set_scheme(match url.scheme() {
69 "https" => "wss",
70 _ => "ws",
71 })
72 .expect("Couldn't build WebSocket URL. Please report.");
73
74 url
75 }
76}