2020-05-09 13:33:02 +00:00
use std ::env ;
2020-05-09 14:40:10 +00:00
use anyhow ::{ Result , Context , Error , anyhow } ;
2020-05-09 13:33:02 +00:00
use log ::* ;
pub struct DiplonatConfig {
pub private_ip : String ,
pub consul_node_name : String ,
2020-05-09 14:40:10 +00:00
pub consul_url : String ,
2020-05-09 13:33:02 +00:00
pub refresh_time : u32 ,
pub expiration_time : u32
}
2020-05-09 14:04:06 +00:00
pub fn load_env ( ) -> Result < DiplonatConfig > {
2020-05-09 14:19:09 +00:00
let epi = " DIPLONAT_PRIVATE_IP " ;
let ert = " DIPLONAT_REFRESH_TIME " ;
let eet = " DIPLONAT_EXPIRATION_TIME " ;
let ecnd = " DIPLONAT_CONSUL_NODE_NAME " ;
2020-05-09 14:40:10 +00:00
let ecu = " DIPLONAT_CONSUL_URL " ;
2020-05-09 14:04:06 +00:00
let config = DiplonatConfig {
2020-05-09 14:40:10 +00:00
consul_url : match env ::var ( ecu ) { Ok ( e ) = > e , Err ( _ ) = > " http://127.0.0.1:8500 " . to_string ( ) } ,
2020-05-09 14:19:09 +00:00
private_ip : env ::var ( epi )
. with_context ( | | format! ( " {} env var must be defined, eg: 192.168.0.18 " , epi ) ) ? ,
refresh_time : env ::var ( ert )
. with_context ( | | format! ( " {} env var must be defined, eg: 60 " , ert ) ) ?
. parse ( )
. with_context ( | | format! ( " {} env var must be an integer, eg: 60 " , ert ) ) ? ,
expiration_time : env ::var ( eet )
. with_context ( | | format! ( " {} env var must be defined, eg: 300 " , eet ) ) ?
. parse ( )
. with_context ( | | format! ( " {} env var must be an integer, eg: 300 " , eet ) ) ? ,
consul_node_name : env ::var ( ecnd )
. with_context ( | | format! ( " {} env var must be defined " , ecnd ) ) ?
2020-05-09 13:33:02 +00:00
} ;
2020-05-09 14:04:06 +00:00
if config . refresh_time * 2 > config . expiration_time {
return Err ( anyhow! ( " Expiration time (currently: {}s) must be twice bigger than refresh time (currently: {}s) " , config . expiration_time , config . refresh_time ) )
2020-05-09 13:33:02 +00:00
}
2020-05-09 14:40:10 +00:00
info! ( " Consul URL: {} " , config . consul_url ) ;
2020-05-09 13:33:02 +00:00
info! ( " Consul node name: {} " , config . consul_node_name ) ;
info! ( " Private IP address: {} " , config . private_ip ) ;
info! ( " Refresh time: {} seconds " , config . refresh_time ) ;
info! ( " Expiration time: {} seconds " , config . expiration_time ) ;
return Ok ( config ) ;
}