diff --git a/settings.sample.yaml b/settings.sample.yaml index 09e2188..aa9ddf7 100644 --- a/settings.sample.yaml +++ b/settings.sample.yaml @@ -55,6 +55,13 @@ server_settings: # presence of multiple IPs. # external_ip: ~ +# Settings for geo IP analytics +metric_settings: + # Whether to enable geo IP analytics + # enable_geoip: false + # geoip_license_key: none + + # These settings are unique to the Rust client, and may be ignored or behave # differently from the official client. extended_options: @@ -88,4 +95,4 @@ extended_options: # when the MD@H program is stopped, all cached files are irrecoverable. # Practically speaking, this isn't all too useful (and definitely hurts # performance), but for peace of mind, this may be useful. - # ephemeral_disk_encryption: false \ No newline at end of file + # ephemeral_disk_encryption: false diff --git a/src/config.rs b/src/config.rs index af36cde..5209ec9 100644 --- a/src/config.rs +++ b/src/config.rs @@ -91,6 +91,7 @@ pub struct Config { pub unstable_options: Vec, pub override_upstream: Option, pub enable_metrics: bool, + pub geoip_license_key: Option, } impl Config { @@ -184,6 +185,13 @@ impl Config { // Unstable options (and related) should never be in yaml config unstable_options: cli_args.unstable_options, override_upstream: cli_args.override_upstream, + geoip_license_key: file_args.metric_settings.and_then(|args| { + if args.enable_geoip.unwrap_or_default() { + args.geoip_license_key + } else { + None + } + }), } } } @@ -230,7 +238,8 @@ struct YamlArgs { // Naming is legacy max_cache_size_in_mebibytes: Mebibytes, server_settings: YamlServerSettings, - // This implementation custom options + metric_settings: Option, + // This implementation's custom options extended_options: Option, } @@ -247,6 +256,12 @@ struct YamlServerSettings { external_ip: Option, } +#[derive(Deserialize)] +struct YamlMetricSettings { + enable_geoip: Option, + geoip_license_key: Option, +} + #[derive(Deserialize, Default)] struct YamlExtendedOptions { memory_quota: Option, @@ -393,6 +408,7 @@ mod config { hostname: None, external_ip: None, }, + metric_settings: None, extended_options: Some(YamlExtendedOptions { memory_quota: Some(Mebibytes::new(50)), cache_type: Some(CacheType::Lru),