1use clap::Parser;
16use common_config::Configurable;
17use common_runtime::global::RuntimeOptions;
18use plugins::PluginOptions;
19use serde::{Deserialize, Serialize};
20
21#[derive(Parser, Default, Debug, Clone)]
22pub struct GlobalOptions {
23 #[clap(long, value_name = "LOG_DIR")]
24 #[arg(global = true)]
25 pub log_dir: Option<String>,
26
27 #[clap(long, value_name = "LOG_LEVEL")]
28 #[arg(global = true)]
29 pub log_level: Option<String>,
30
31 #[cfg(feature = "tokio-console")]
32 #[clap(long, value_name = "TOKIO_CONSOLE_ADDR")]
33 #[arg(global = true)]
34 pub tokio_console_addr: Option<String>,
35}
36
37#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq)]
40#[serde(default)]
41pub struct GreptimeOptions<T> {
42 pub runtime: RuntimeOptions,
44 pub plugins: Vec<PluginOptions>,
46
47 #[serde(flatten)]
49 pub component: T,
50}
51
52impl<T: Configurable> Configurable for GreptimeOptions<T> {
53 fn env_list_keys() -> Option<&'static [&'static str]> {
54 T::env_list_keys()
55 }
56}