service-mango-health: read env variable for more configuration entries (#901)
(cherry picked from commit af9b21c430
)
This commit is contained in:
parent
acef7278a0
commit
a6ed29b5a1
|
@ -1,8 +1,10 @@
|
||||||
use serde_derive::Deserialize;
|
use serde_derive::Deserialize;
|
||||||
|
use services_mango_lib::env_helper::string_or_env;
|
||||||
use services_mango_lib::postgres_configuration::PostgresTlsConfig;
|
use services_mango_lib::postgres_configuration::PostgresTlsConfig;
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize)]
|
#[derive(Clone, Debug, Deserialize)]
|
||||||
pub struct PostgresConfig {
|
pub struct PostgresConfig {
|
||||||
|
#[serde(deserialize_with = "string_or_env")]
|
||||||
pub connection_string: String,
|
pub connection_string: String,
|
||||||
/// Number of parallel postgres connections used for insertions
|
/// Number of parallel postgres connections used for insertions
|
||||||
pub connection_count: u64,
|
pub connection_count: u64,
|
||||||
|
|
|
@ -1,12 +1,16 @@
|
||||||
use serde_derive::Deserialize;
|
use serde_derive::Deserialize;
|
||||||
|
use services_mango_lib::env_helper::string_or_env;
|
||||||
use services_mango_lib::postgres_configuration::PostgresConfiguration;
|
use services_mango_lib::postgres_configuration::PostgresConfiguration;
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize)]
|
#[derive(Clone, Debug, Deserialize)]
|
||||||
pub struct Configuration {
|
pub struct Configuration {
|
||||||
pub postgres: Option<PostgresConfiguration>,
|
pub postgres: Option<PostgresConfiguration>,
|
||||||
|
#[serde(deserialize_with = "string_or_env")]
|
||||||
pub rpc_http_url: String,
|
pub rpc_http_url: String,
|
||||||
|
#[serde(deserialize_with = "string_or_env")]
|
||||||
pub rpc_ws_url: String,
|
pub rpc_ws_url: String,
|
||||||
|
#[serde(deserialize_with = "string_or_env")]
|
||||||
pub mango_group: String,
|
pub mango_group: String,
|
||||||
pub computing_configuration: ComputingConfiguration,
|
pub computing_configuration: ComputingConfiguration,
|
||||||
pub logging_configuration: LoggingConfiguration,
|
pub logging_configuration: LoggingConfiguration,
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
use serde::{Deserialize, Deserializer};
|
||||||
|
use std::env;
|
||||||
|
|
||||||
|
/// Get a string content, or the content of an Env variable it the string start with $
|
||||||
|
///
|
||||||
|
/// Example:
|
||||||
|
/// - "abc" -> "abc"
|
||||||
|
/// - "$something" -> read env variable named something and return it's content
|
||||||
|
///
|
||||||
|
/// *WARNING*: May kill the program if we are asking for anv environment variable that does not exist
|
||||||
|
pub fn string_or_env<'de, D>(deserializer: D) -> Result<String, D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
{
|
||||||
|
let value_or_env = String::deserialize(deserializer)?;
|
||||||
|
let value = match &value_or_env.chars().next().unwrap() {
|
||||||
|
'$' => env::var(&value_or_env[1..]).expect("reading from env"),
|
||||||
|
_ => value_or_env,
|
||||||
|
};
|
||||||
|
Ok(value)
|
||||||
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
|
pub mod env_helper;
|
||||||
pub mod postgres_configuration;
|
pub mod postgres_configuration;
|
||||||
pub mod postgres_connection;
|
pub mod postgres_connection;
|
||||||
pub mod retry_counter;
|
pub mod retry_counter;
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
|
use crate::env_helper::string_or_env;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize, Default)]
|
#[derive(Clone, Debug, Deserialize, Default)]
|
||||||
pub struct PostgresConfiguration {
|
pub struct PostgresConfiguration {
|
||||||
|
#[serde(deserialize_with = "string_or_env")]
|
||||||
pub connection_string: String,
|
pub connection_string: String,
|
||||||
pub allow_invalid_certs: bool,
|
pub allow_invalid_certs: bool,
|
||||||
pub tls: Option<PostgresTlsConfig>,
|
pub tls: Option<PostgresTlsConfig>,
|
||||||
|
|
|
@ -51,14 +51,8 @@ pub async fn connect(
|
||||||
};
|
};
|
||||||
|
|
||||||
let config = config.clone();
|
let config = config.clone();
|
||||||
let connection_string = match &config.connection_string.chars().next().unwrap() {
|
|
||||||
'$' => {
|
|
||||||
env::var(&config.connection_string[1..]).expect("reading connection string from env")
|
|
||||||
}
|
|
||||||
_ => config.connection_string.clone(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let (client, connection) = tokio_postgres::connect(&connection_string, tls).await?;
|
let (client, connection) = tokio_postgres::connect(&config.connection_string, tls).await?;
|
||||||
|
|
||||||
let handle = tokio::spawn(async move { connection.await });
|
let handle = tokio::spawn(async move { connection.await });
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue